我有一个带有名为“status”的枚举属性的模型。其中一个值(“进行中”)有一个空格。
class Game < ApplicationRecord
enum status: [:scheduled, :"in progress", :final]
end
我可以使用查询方法获取其他值。
my_game.scheduled?
true
my_game.final?
false
my_game.final! => true
我可以通过更新属性将状态设置为进行中:
my_game.status = "in progress"
我可以通过检查属性来获取状态:
my_game.status
"in progress"
my_game.status=="in progress"
true
但是,有没有办法访问查询方法呢?
my_game."in progress"?
是的,事实证明Rails通过添加下划线来使查询方法可用:
my_game.in_progress! => true
my_game.in_progress?
true
但是,您可以通过在枚举值中使用下划线开头来避免头痛:
enum status: [:scheduled, :in_progress, :final]
然后像平常一样引用查询方法:
my_game.in_progress?
false
my_game.in_progress! => true
my_game.in_progress?
true
之后,使用 i18n 模块 为枚举值提供用户友好的文本。