如何通过集合选择从活动记录中检索信息?

时间:2010-08-19 21:44:01

标签: ruby-on-rails

我有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)...... 如何将此ID与社区名称联系起来?

2 个答案:

答案 0 :(得分:2)

不确定这是否有效但是尝试一下:

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 :(得分:1)

我认为您在第一次尝试时更接近但不是找到所有社区,而是找到用户所属的社区。因此,您将使用以下Community.find(:all)代替:

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

这假设您为视图设置了@user变量。您需要这样才能将查找限制为您的用户所属的社区。

它还假设Communityhas_many :memberships上存在关联。我已经猜到你已经从问题中得到了这个。