Rails API -将字符串参数转换为enum值



在Ruby on Rails应用程序中,假设有一个enum字段的模型:

class Car < ActiveRecord::Base
enum color: {
blue: 0,
green: 1,
red: 2
}
end

有一个公开的API端点用于创建我的模型的新实例。

params[:color]发送的值与enum密钥不匹配。(例如,"Deep Ocean Blue"被作为参数值发送)。

我知道我可以将我的enum更改为:

class Car < ActiveRecord::Base
enum color: {
'Deep Ocean Blue' => 0,
# ... etc.
}
end

但这使得Rails为enum生成的方法奇怪且难以使用…

my_car.blue?
my_car.send('Deep Ocean Blue?') # not even sure this works but you get the idea

我的问题是,处理这种情况的最佳(最合理)方法是什么?

我应该创建参数和枚举键的映射,并在before_validation钩子中转换正确的枚举值,还是有更好的处理方法?

谢谢!

如果你有固定的颜色选项,你可以尝试使用underscore方法

2.6.5 :007 > "Deep Ocean Blue".parameterize.underscore
=> "deep_ocean_blue" 

可以将枚举保持为

class Car < ActiveRecord::Base
enum color: {
'deep_ocean_blue' => 0,
'golden_rose' => 1,
# ... etc.
}
end

创建对象时,将color参数转换为underscore

Car.create(color: params[:color].parameterize.underscore, # other parameters ..)

最新更新