【发布时间】:2021-08-19 20:02:34
【问题描述】:
在 Ruby on Rails 应用程序中,假设有一个带有 enum 字段的模型,例如:
class Car < ActiveRecord::Base
enum color: {
blue: 0,
green: 1,
red: 2
}
end
有一个 API 端点用于创建我的模型的新实例。
为params[:color] 发送的值与enum 键不匹配。
(例如,“深海蓝”之类的东西作为参数值发送)。
我知道我可以将我的 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
我的问题是,处理这种情况的最佳(“Railsiest”)方法是什么?
我应该创建参数和枚举键的映射,并在 before_validation 钩子中转换正确的枚举值,还是有更好的处理方法?
谢谢!
【问题讨论】:
-
您可以使用
deep_blue_ocean,如果您需要显示它,那么to_s.humanize应该解决这个问题,并且可以由underscore处理转换回来。如果您的代码中已经充斥着这些调用,或者您只有 1 个蓝色,您甚至可以使用alias_method :blue?, :deep_blue_ocean?。
标签: ruby-on-rails ruby api ruby-on-rails-5