【问题标题】:Multiple values from f.select in rails来自 f.select 在 rails 中的多个值
【发布时间】:2015-10-22 23:08:03
【问题描述】:

这应该不是问题,但我想不通。

我使用表单助手填充一个选择字段,如下所示:

...
  <%= f.select(:entity_id, entities.map {|entity| [entity.name, entity.id]}) %>
...

这是创建一个User 并设置他们的entity_id。提交表单后,我现在有了一个新的User,其entity_id 现在是选择字段中选项的值。

例如,如果我从 select 元素中选择了“Store A”作为我的实体,那么在我提交表单后,该用户的 entity_id 现在是“1”。这很好,但我还需要与用户关联的entity_name“Store A”。

所以不是我的新用户返回以下内容:

#<User name: 'John Doe', entity_id: '1', entity_name: 'Store A'>

我得到了

#<User name: 'John Doe', entity_id: '1', entity_name: nil>

这是有道理的,因为我从未设置过entity_name

如何根据选择在此表单中设置entity_name

【问题讨论】:

    标签: ruby-on-rails forms form-helpers


    【解决方案1】:

    如果我正确理解您的问题,您似乎想为单个输入框同时设置两个值。 Rails 没有提供一种简单的方法来做到这一点,但似乎this answer 与您想要的相似。

    但是,我仍然会问一个问题:为什么要尝试在提交表单时全部完成?

    您已经在User 上设置了entity_id,所以您有几个选择。

    1. 假设 entities 是 ActiveRecord 或其他一些 ORM 对象的关系,您可以让关联来完成工作。如果用户has_one :entity 然后需要知道它的entity_name 那么它可能看起来像:user.entity.name 在你设置正确的entity_id 上说user 之后。这利用了 Rails 提供的内置关系框架,并防止您复制数据。

    2. 1234563再次。在接受此表单的控制器中,以与之前相同的方式获取entities,并将具有提交的entity_id 名称的实体链接到您正在更新的User
    3. 如果这些都不可行或没有意义,请继续使用 JSON 编码的表单值。

    【讨论】:

      【解决方案2】:

      试试这个

      <%= f.select :entity_id,
                  options_from_collection_for_select(@entities, :id, :name, entities),
                  {},
                  {
                    data: { placeholder: "Choose entity..." },
                    multiple: true
                  } %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-22
        相关资源
        最近更新 更多