2016-08-23 4 views
0

Мои столы:Rails collection_select с Join Table

enter image description here

Person belongs_to и номер has_many Person

Мой 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> 

Я хочу сказать, что когда пользователь отправляет форму, мне нужно отправить значение идентификатора человека, но мне нужно показать в выпадающем списке имя комнаты (в моем примере, где я показываю комнату.ид) :

<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

В вашей коллекции выберите, что вы вызываете ': room.id' как метод, который будет заполнять имя ваших параметров. Вы пытались изменить это на ': room.name'? – jaydel

+0

на самом деле есть: room_id .. Я обновил его. –

ответ

1

Рассмотрите возможность использования select, а не collection_select. Этот метод позволяет вам контролировать зернистость над тем, что используется для идентификатора и имени каждой опции.

В вашем случае, вы хотите что-то вроде:

выберите (: осмотр,: person_id, Person.involving (current_user) .collect {| р | [p.id, p.room.name]} , {... другие параметры метода ...})

Это позволяет указать массив пар id/name опций. Вы получаете всех вовлеченных людей, используя свою область действия, а затем перебираете те, которые возвращают массив для каждого найденного, где первым значением в массиве является значение параметра, а второе - отображаемый текст опции.

Проверьте это documentation для более подробной информации.