我有3个模型(用户 - 会员 - 社区)
用户可以成为许多社区的成员。为此我创建了一个包含user_id,community_id的成员资格。
连接后,用户必须选择社区。模型User作为包含该唯一社区的community_id。
编辑时,他可以更改此社区。 p>
如果我这样做:
<%= 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与社区名称联系起来?
答案 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选项在一个查询中预取成员资格集合中的所有社区。 p>
答案 1 :(得分:1)
我认为您在第一次尝试时更接近但不是找到所有社区,而是找到用户所属的社区。因此,您将使用以下Community.find(:all)
代替:
Community.find(:all,
:includes => :memberships,
:conditions => ['memberships.user_id = ?', @user.id])
这假设您为视图设置了@user
变量。您需要这样才能将查找限制为您的用户所属的社区。 p>
它还假设Community
:has_many :memberships
上存在关联。我已经猜到你已经从问题中得到了这个。