带有名称整数的枚举

时间:2019-05-20 00:29:43

标签: ruby-on-rails enums

在我的用户模型中,我试图用包含数字的名称声明一个枚举,如下所示:

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

除了使用其他名称并从前端解决问题之外,还有其他方法吗?

2 个答案:

答案 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_twentyUser._18_to_22

那样使用它