Rails 4 – 如何使用枚举?
我正在尝试在Rails 4上制作应用程序。
我发布了这个问题并得到了一些建议: Rails 4 -Simple Form如何保存键和显示值
我想弄清楚如何实现这个建议。
目前,我有一个偏好模型:
enum self_governance: { tier_1: 1, tier_2: 2, tier_3: 3, tier_4: 4, tier_5: 5 } enum autonomy: { tier_11: 1, tier_21: 2, tier_31: 3, tier_41: 4, tier_51: 5 }
在我的偏好forms中,我有:
我有一个偏好显示视图:
当我保存所有这些并尝试它时,我收到此错误:
NoMethodError at /preferences/1/edit undefined method `self_governance' for # Did you mean? self_governances
任何人都可以看到如何使这项工作?
我是否可能需要在首选模型中为枚举添加def / end标签? 我没有任何使用代码’enum’的经验
你是如此接近:)修复是正确的错误。
你的选择是打电话
Preference.self_governance.to_a.map { |p| [p.humanize, p] }
而你的错误告诉你复数是错误的。 请记住,如果你在一个对象上调用枚举,那就是
@preference.self_governance
但是如果你调用模型本身,Preference,并请求一个集合,它是复数。
Preference.self_governances
因为enum
是特殊的,你的枚举可能只是数组,而不是哈希:
enum self_governance: [ tier_1, tier_2, tier_3, tier_4, tier_55 ] enum autonomy: [ tier_11, tier_21, tier_31, tier_41, tier_51 ]
您的视图将如下所示:
<%= f.input :self_governance, as: :select, label: "Select your governance approach", collection: Preference.self_governances.map { |key, value| [key.humanize, key] } %>
它会存储数组的索引号,就像魔术一样:)
Rails为你self_governances
了enum集合,所以你的可能self_governances
。
这意味着Preference.self_governances
将返回带有定义的哈希值,而实际保存该值的属性是单个的,如@preference.self_governance
一个例子:
@preference = Preference.new @preference.self_governance = Preference.self_governances[:tier_1]
当您使用enum
内部轨道将在内部执行时,添加一个复数类方法定义,其中包含您定义的名称,该名称将返回带有值的哈希值,并将使用您为属性编写的名称(如您所写)访问器将获取/设置对象实例上枚举的实际值。
另一个常见用途是状态,给定一个Test
类:
enum status: { active: 1, inactive: 2 }
因此,对于上面的示例rails,将添加一个只返回枚举值的Test.statuses
方法。 然后,对于Test
对象的实例,您将拥有一个带有您的名称的访问者@instance.status
,您可以使用该名称来获取或设置Test.statuses
返回的哈希的状态。
希望它有意义。