【问题标题】:Plural of an enum called access复数的枚举称为访问
【发布时间】:2019-04-27 14:19:20
【问题描述】:

我在帐户模型上定义了一个名为 access 的枚举。

enum access: [:basic, :silver, :gold, :platinum]

效果很好,例如account.gold! 将值设置为“黄金”,然后 account.access 返回“黄金”。因此,我应该能够用acesss 的复数列出访问值的散列,但是account.accesses 会返回

NoMethodError: undefined method `accesses' for #<Account:0x00007f9e7827e408>
Did you mean?  access
               access?
           access=

如果我执行'access'.pluralize,它会返回accesses,那么为什么account.accesses 不起作用?

【问题讨论】:

  • 你确定 RoR 是枚举的复数形式吗?我知道它会对数据库实体执行此操作,但我看不出使用枚举执行此操作的意义。
  • 是的,请参阅stackoverflow.com/a/25570511/1299362,它可能很有用,因为您可以编写在有人向枚举添加不同值后继续工作的方法。

标签: ruby-on-rails


【解决方案1】:

需要在模型类上调用复数方法(而不是在类的实例上):

2.5.3 :001 > Account.accesses
 => {"basic"=>0, "silver"=>1, "gold"=>2, "platinum"=>3}

参见示例here。查看实际代码here。它定义了类的方法。

【讨论】:

    【解决方案2】:

    如果你尝试复数形式,我认为它应该可以工作:

    Account.accesses

    映射通过具有复数属性名称的类方法公开。

    在此处查看指南:https://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多