【问题标题】:enum with integer for names名称为整数的枚举
【发布时间】:2019-05-20 00:29:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails enums


    【解决方案1】:

    enum 在模型中为给定值创建范围。并且范围名称不能以整数开头。 所以我能想到的唯一解决方法是:

    enum age_group: [
      eighteen_to_twenty: '18_to_22',
      ...
      ...
    ]
    

    enum age_group: [
      _18_to_20: '18_to_22',
      ...
      ...
    ]
    

    您可以像 User.eighteen_to_twentyUser._18_to_22 一样使用它

    【讨论】:

    • 是的,我同意两者都可以,但是第一个太长而无法使用,例如“thirty_eight_to_fourty_two”太长了。第二个选项更好但丑陋:)
    【解决方案2】:

    您正在尝试使用enum 提供的便捷方法,但您不必使用这些方法。您可以使用更传统的where 查询:

    User.where(age_group: '18_to_22')
    

    如果您更喜欢使用便捷的方法,您仍然可以使用send,但我认为它不像使用where那样清晰:

    User.send('18_to_22')
    

    【讨论】:

    • 在这里使用发送不是很清楚,我想我会坚持使用老式的 where,谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多