【问题标题】:In Rails, if an enum has a space, is there a way to access its query shortcut methods?在 Rails 中,如果枚举有空格,有没有办法访问它的查询快捷方式?
【发布时间】:2021-06-05 03:56:21
【问题描述】:

我有一个带有枚举属性的模型,称为“状态”。其中一个值(“进行中”)有一个空格。

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"?

【问题讨论】:

  • 我认为你应该将你的枚举更改为enum status: [:scheduled, :in_progress, :final] 只是为了避免所有的WAAT!?!它可能导致的时刻。使用 I18n 模块将枚举状态映射到用户友好的文本。
  • 例如,如果我必须在您的应用程序上工作并且不得不花费 20 分钟发现我必须使用 game.statuses[:"in progress"] 而不是预期的 game.statuses[:in_progress] 来获取枚举映射,我不会非常高兴。
  • 非常聪明的@max - 答案已更新 - 谢谢!

标签: ruby-on-rails activerecord enums model


【解决方案1】:

是的,事实证明 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 module 它为枚举值提供用户友好的文本。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2016-01-27
    • 2012-01-06
    • 2020-03-15
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多