2011-06-29 45 views
0

我有類似如下的可能在Rails 3中鏈接查詢?

class Group < ActiveRecord::Base 
has_many :group_users 
end 

class GroupUser < ActiveRecord::Base 
    belongs_to :user, :group 
end 

class User < ActiveRecord::Base 
has_many :group_users 
end 

我不使用has_many_through的原因是因爲GROUP_USER類已經不僅僅是一個鏈接表的詳細信息,所以我希望能夠訪問這些值。

我想什麼做雖然是通@groups到頁面中,遍歷組的用戶,但在用戶對象獲取以及

所以

<% @groups.each do |group| %> 
    <%= group.group_user.user.name %> 
<% end %> 
+0

爲什麼不能'@ group_users.each'? – 2011-06-29 22:12:33

+0

只是一個簡短的提示,我想你可能會把'has_many:through'與'has_and_belongs_to_many'混淆。 HMT允許連接表中的其他列。 – Brian

+0

好吧,我的第二個代碼示例有點誤導,我實際上在顯示頁面上,所以我確實傳遞了@group對象,因此如果可能,我真的想通過@ group.group_users循環。 – Jhorra

回答

0

這是我會怎麼做它:

用戶模型

class User < ActiveRecord::Base 
    has_many :memberships 
    has_many :groups, :through => :memberships 
end 

組模式

class Group < ActiveRecord::Base 
    has_many :memberships 
    has_many :users, :through => :memberships 
end 

會員制模式

class Membership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 

控制器

def show 
    @groups = Group.all 
end 

查看

<% @groups.each do |group| %> 
    <% group.users.each do |user| %> 
    <%= user.name %> 
    <% end %> 
<% end %> 

有可能有幾種方法可以做到這一點,但這應該讓你開始。

希望這會有所幫助!

0

如果你想從GroupUser模型訪問屬性,只是這樣做:

<% @groups.each do |group| %> 

    <% group.group_users.each do |group_user| %> 
    <%= group_user.attribute_name %> 
    <%= group_user.user.name 
    <% end %> 
<% end %> 

爲了使這更有效地從事物的SQL方面,你可以使用預先加載:

Group.all(:includes => [:group_users => :user]) 

F