【问题标题】:Rails form select to return all params in an objectRails 表单选择以返回对象中的所有参数
【发布时间】:2015-03-19 17:00:21
【问题描述】:

我的控制器中有一个列表,如下所示:

@relatives = [
    {
        id: '1',
        firstName: 'John',
        lastName: 'Smith',
        related: 'Father'
    },
    {
        id: '2',
        firstName: 'Sarah',
        lastName: 'Smith',
        related: 'Mother'
    }
]

我想将此列表放在我认为的表单中。所以这将是一个亲属的下拉列表,但它只会在选择中显示 firstName 字段。当用户选择一个对象并提交表单时,整个相关对象将被传递给参数中的控制器。

我正在查看 rails collection_select API,但不知道如何选择表单中的整个对象。

【问题讨论】:

  • 这些数据是从哪里生成的?它不是来自数据库或其他什么吗?
  • 是的,我的数据来自数据库,通过 REST 服务。
  • 所以我可以使用这个f.select :relative, options_from_collection_for_select(@relatives, 'id', 'firstName'),但这只会将 :relative 参数设置为 id 字段。我需要 :relative 参数有一组包含所有字段的子参数。这有意义吗?
  • @32clemons 啊,我以为你在使用 ActiveRecord。尝试使用这个:f.select :relative, @relatives.each {|r| [ r[:firstName], r ]}
  • 我刚试过,但是当它提交表单时,实际的:relative 参数只是一个包含“#<0x0...>

标签: ruby-on-rails forms select


【解决方案1】:

好的,所以我决定最好的方法是在我的控制器中创建一个哈希,键是显示文本,值是我的对象的 JSON 表示。

控制器:

@relatives = {
    "John" => "{id: 1, firstName: 'John', lastName: 'Smith', related: 'Father'}",
    "Sarah" => "{id: 2, firstName: 'Sarah', lastName: 'Smith', related: 'Mother'}"
}

那么在我看来,我会使用 options_for_select:

f.select :relative, options_for_select(@relatives)

当用户选择一个值并提交表单时,JSON 字符串将作为值返回到参数中。在控制器中,我只是将 JSON 转换回模型。谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2016-08-15
    • 2010-11-25
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多