这应该不是问题,但我无法弄明白。
使用表单助手我填充选择字段,如下所示:
...
<%= 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
?
答案 0 :(得分:0)
如果我理解你的问题,看起来你想为一个输入框同时设置两个值。 Rails没有提供一种简单的方法,但似乎this answer与你想要的类似。
但是,我仍然会问这样一个问题:为什么要在表单提交时尝试这一切?
您已经在entity_id
上设置了User
,因此您有几个选择。
假设entities
是ActiveRecord或其他ORM对象的关系,您可以让关联完成工作。如果用户has_one :entity
然后需要知道其entity_name
,那么在您在user.entity.name
上设置正确的entity_id
之后,它可能会显示为:user
。这利用了Rails提供的内置关系框架,使您不会重复数据。
如果entities
不是一个关系或一组持久对象,那么用于生成表单的代码必须在渲染时间内知道entities
,因此您可以理解再次访问它。在接受此表单的控制器中,以与先前相同的方式获取entities
,并将具有提交的entity_id
名称的实体链接到您要更新的User
。
如果这些都不可行或有意义,请继续使用JSON编码的表单值。
答案 1 :(得分:0)
试试这个
<%= f.select :entity_id,
options_from_collection_for_select(@entities, :id, :name, entities),
{},
{
data: { placeholder: "Choose entity..." },
multiple: true
} %>