首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4-键值对

Rails 4-键值对
EN

Stack Overflow用户
提问于 2016-04-13 00:15:20
回答 1查看 701关注 0票数 0

我正试图在Rails 4中制作一个应用程序。

我最近问了这两个问题,并在回答中采纳了这些建议。Rails 4 - how to use enum?

我还在挣扎。

我有一个带有输入选择器的表单:

代码语言:javascript
复制
<%= 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层

目前,我有一个偏好模型:

代码语言:javascript
复制
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
                        }           

我有一个首选项显示视图:

代码语言:javascript
复制
<%= @organisation.preference.self_governance.try(:humanize) %>

此外,当我接受表单问题(目前)并尝试呈现显示页面时,我会得到以下错误:

代码语言:javascript
复制
'["tier_1", 1]' is not a valid self_governance

有人能看到我做错了什么吗?

我只想在数据库中保存数字1,但是显示单词'Tier 1‘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-13 00:23:33

更新窗体以正确返回枚举中的键和值集合。Preference.self_governances是哈希对象的一种类型,而不是调用to_a,只对键和值进行迭代:

代码语言:javascript
复制
<%= 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] }的输出

我们得到以下信息:

代码语言:javascript
复制
[
  ["Tier 1", "tier_1"], 
  ["Tier 2", "tier_2"]
  ...
]

注意,第一个值是显示为select标签的值,第二个值是发送到param中的控制器的值。

编辑:

使用枚举时,可以将枚举的键或值分配给字段。

代码语言:javascript
复制
preference.self_governance = 1 # Works
preference.self_governance = :tier_1  # Works
preference.self_governance = "tier_1" # Works

但是不能将值赋值为字符串:

代码语言:javascript
复制
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")的键传递给您的表单,否则您将

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36586311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档