我的桌子:
Person belongs_to and 房间有很多人
我的collection_select
<%= collection_select(:inspection, :person_id, Person.involving(current_user), :id, :room_id) %>
如果我没错,在HTML中它将表示为以下代码:
<select name="post[person_id]">
<option value="<%= person.id %>"><%= person.room_id %></option>
<% end %>
</select>
我的观点是,当用户提交表单时,我需要发送Person Id值,但我需要在下拉列表中显示房间的名称(在我的示例中,我显示了room.id),如下所示: / p>
<select name="post[person_id]">
<option value="<%= person.id %>"><%= room.name %></option>
<% end %>
</select>
我该怎么做? 我认为我认为我需要与房间桌一起加入人桌?如果是解决方案,我该怎么做?
我的人模特:
scope :involving, -> (user) do
where("persons.id = ?", user.id)
end
我的观点
<%= form_for @inspection do |f| %>
<label>Select</label>
<%= collection_select(:inspection, :person_id, Person.involving(current_user), :id, :room.id) %>
<%= f.submit "Send" %>
我试图尽可能清楚地说明这一点。
答案 0 :(得分:1)
考虑使用ERROR: for nginx Cannot start service nginx: mkdir /c/Users/Yates/Documents/docker/sites/*: protocol error
而不是select
。此方法允许您对用于每个选项的id和名称的内容进行更精细的控制。
在您的情况下,您需要以下内容:
select(:inspection,:person_id,Person.involving(current_user).collect {| p | [p.id,p.room.name]},{...其他方法选项...})
这允许您指定选项ID /名称对的数组。你得到所有参与者使用你的范围,然后迭代那些为每个找到的数组返回一个数组,其中数组中的第一个值是选项值,第二个是显示的选项文本。
请查看此documentation以获取更多详细信息。