Rails collection_select与连接表

时间:2016-08-23 12:28:33

标签: ruby-on-rails

我的桌子:

enter image description here

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" %>

我试图尽可能清楚地说明这一点。

1 个答案:

答案 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以获取更多详细信息。