我正试图在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] } %>当我保存并尝试它时,选择菜单显示:
"tier_1",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,但是显示单词'Tier 1‘。
发布于 2016-04-13 00:23:33
更新窗体以正确返回枚举中的键和值集合。Preference.self_governances是哈希对象的一种类型,而不是调用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.因此,请确保将所选枚举(即"tier_1")的键传递给您的表单,否则您将
https://stackoverflow.com/questions/36586311
复制相似问题