ruby-on-rails - Rails API - 将字符串参数转换为枚举值
问题描述
在 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 挂钩中转换正确的枚举值,还是有更好的处理方法?
谢谢!
解决方案
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
在创建对象时将参数颜色转换为underscore
Car.create(color: params[:color].parameterize.underscore, # other parameters ..)
推荐阅读
- angular - 当 Moment 语言环境更改时,Angular Material DatePicker 不会更改
- sql-server - 为什么此查询中的变量不能返回任何值?
- python - 如何在python列表中使用索引?
- angular - 将 JS 日期时间格式化为更正 ISO 格式
- parsing - X 后响应退出
- spring - 如何使用 JUnit 运行 Spring AOP?
- javascript - 如何引用在 Javascript 中重定向到通用 URL 的缩短引荐来源网址?
- python - Flask:路由的相同端点
- javascript - 纹理喷溅地形上的法线贴图
- android - Ionic android 应用程序仅适用于 android 7.0+