我试图在Rails 4中创建一个应用程序。
我最近问了这两个问题,并在回复中提出了建议。 Rails 4 - how to use enum?
我还在苦苦挣扎。
我有一个带有输入选择器的表单:
<%= f.input :self_governance, as: :select, label: "Select your governance approach", collection: Preference.self_governances.to_a.map { |p| [p.to_s.humanize, p] } %>
当我保存并尝试时,选择菜单显示:
[&#34; tier_1&#34;,1]
我想要的是显示:第1层
目前,我有一个偏好模型:
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
}
我有偏好显示视图:
<%= @organisation.preference.self_governance.try(:humanize) %>
此外,当我接受表单问题(暂时)并尝试呈现显示页面时,我收到此错误:
'["tier_1", 1]' is not a valid self_governance
任何人都可以看到我做错了吗?
我只想在数据库中保存数字1,但显示单词&#39;第1层&#39;。
答案 0 :(得分:1)
更新您的表单,以便从您的枚举中正确返回一组键和值。 Preference.self_governances
是一种哈希对象.r而不是调用to_a
,只是迭代键和值:
<%= f.input :self_governance, as: :select, label: "Select your governance approach", collection: Preference.self_governances.map { |key, val| [key.humanize, key] } } %>
如果我们只查看输出:
Preference.self_governances.map { |key, val| [key.humanize, key] }
我们得到以下信息:
[
["Tier 1", "tier_1"],
["Tier 2", "tier_2"]
...
]
请注意,第一个值显示为select
标签,第二个值是param
内发送给控制器的值。
修改强>
使用枚举时,您可以将枚举的键或值分配给字段。
preference.self_governance = 1 # Works
preference.self_governance = :tier_1 # Works
preference.self_governance = "tier_1" # Works
但您无法将该值指定为字符串:
preference.self_governance = '1'
=> "ArgumentError: '1' is not a valid self_governance" # Doesn't work, tries to look for key '1' in enum, but doesn't exist.
因此,请务必将所选枚举的密钥(即&#34; tier_1&#34;)传递给您的表单,否则您就可以了