在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 ..)