在我的用户模型中,我试图用包含数字的名称声明一个枚举,如下所示:
class User < ApplicationRecord
enum age_group: [
'18_to_22',
'23_to_27',
'28_to_32',
'33_to_37',
'38_to_42'
]
end
但是很明显,在调用用户对象时会产生问题
错误:
User.18_to_22
syntax error, unexpected tINTEGER, expecting '('
User.18_to_22
除了使用其他名称并从前端解决问题之外,还有其他方法吗?
答案 0 :(得分:1)
您正在尝试使用enum
提供的便捷方法,但不必使用这些方法。您可以使用更传统的where
查询:
User.where(age_group: '18_to_22')
如果您更喜欢使用便捷方法,那么使用send
仍然可以使用便捷方法,但是我认为使用where
并不那么方便:
User.send('18_to_22')
答案 1 :(得分:1)
enum
在模型中为给定值创建范围。并且作用域名称不能以整数开头。
因此,我唯一能想到的解决方法是:
enum age_group: [
eighteen_to_twenty: '18_to_22',
...
...
]
OR
enum age_group: [
_18_to_20: '18_to_22',
...
...
]
您可以像User.eighteen_to_twenty
或User._18_to_22