Как я могу получить информацию из активной записи с выбором коллекции? - PullRequest
0 голосов
/ 20 августа 2010

У меня 3 модели (Пользователи - Членство - Сообщество)

Пользователи могут стать участниками многих сообществ. Для этого я сделал членство, которое содержит user_id, community_id.

После подключения пользователь должен выбрать сообщество. Модель User как community_id, содержащая это уникальное сообщество.

При редактировании он сможет изменить это сообщество.

Если я сделаю это:

<%= f.collection_select :community_id, Community.find(:all), :id, :name, { :allow_blank => 'Select a community' }, :style => "width: 200px;" %>

Все сообщества счастливее, а также те, кто он не является членом. Я попробовал это:

<%= f.collection_select :community_id, Membership.find(:all), :community_id, :id, { :allow_blank => 'Select a community' }, :style => "width: 200px;" %>

Но я показываю только номер (: id) членства ... Как я могу присоединиться к этому идентификатору с названием сообщества?

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

Не уверен, что это сработает, но попробуйте:

member.rb # add a method to the member model that returns the 
def community_name
  community.name
end

#view
<%= f.collection_select :community_id, Membership.find(:all, :include => :community), :community_id, :community_name, { :allow_blank => 'Select a community' } %>

Параметр: include выполняет предварительную выборку всех сообществ в коллекции участников в одном запросе.

1 голос
/ 20 августа 2010

Я думаю, что вы были ближе с первой попытки, но вместо того, чтобы находить все сообщества, вам нужно просто найти сообщества, членом которых является пользователь. Поэтому вместо Community.find(:all) вы бы использовали:

Community.find(:all,
               :includes => :memberships, 
               :conditions => ['memberships.user_id = ?', @user.id])

Предполагается, что для вашего просмотра настроена переменная @user. Это необходимо, чтобы ограничить поиск только теми сообществами, членами которых является ваш пользователь.

Предполагается также, что существует ассоциация на Community: has_many :memberships. Я догадался, что вы уже поняли это из вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...