来自f.select的多个值在rails中

时间:2015-10-22 23:08:03

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

这应该不是问题,但我无法弄明白。

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

...
  <%= 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“商店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

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,看起来你想为一个输入框同时设置两个值。 Rails没有提供一种简单的方法,但似乎this answer与你想要的类似。

但是,我仍然会问这样一个问题:为什么要在表单提交时尝试这一切?

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

  1. 假设entities是ActiveRecord或其他ORM对象的关系,您可以让关联完成工作。如果用户has_one :entity然后需要知道其entity_name,那么在您在user.entity.name上设置正确的entity_id之后,它可能会显示为:user。这利用了Rails提供的内置关系框架,使您不会重复数据。

  2. 如果entities不是一个关系或一组持久对象,那么用于生成表单的代码必须在渲染时间内知道entities,因此您可以理解再次访问它。在接受此表单的控制器中,以与先前相同的方式获取entities,并将具有提交的entity_id名称的实体链接到您要更新的User

  3. 如果这些都不可行或有意义,请继续使用JSON编码的表单值。

答案 1 :(得分:0)

试试这个

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