2012-06-22 28 views
0

给出两种型号:如何使用包含activerecord关联?

User 
    has_many :group_members 
    has_many :groups, :through => :group_members 

GroupMember 
    belongs_to :group 
    belongs_to :user 

Group 
    has_many :group_members 
    has_many :users, :through => :group_members 
    has_many :group_invites 

GroupInvite 
    belongs_to :user 

感谢Rails的,我可以很容易地得到所有用户的群体具有:

组= current_user.groups

我再取团体和迭代的这个名单通过像这样创建JSON对象:

groups.each do |group| 
    .... 
    group.group_members.count 
    group.invites.first_code 

等等等等。问题是这导致了大量的查询,因为我还没有找到一种方法来使用includes(:)来查询所有的group_members,并且为每个每个循环的查询邀请所有组合使用一个查询。你如何使用任何建议,包括像这样:

current_user.groups.includes(:group_members, :invites) ? 

回答

2

试试这个:

GroupMember 
    belongs_to :group 
    belongs_to :user 

Group 
    has_many :group_members 
    has_many :users, :through => :group_members 
    has_many :invites, : 
    has_many :invitees, :through => :invites, :source => :user 

Invite 
    belongs_to :group 
    belongs_to :user 

现在,您可以:

current_user.groups.includes(:invitees) 
+0

这是什么线? – AnApprentice

+0

似乎没有效果。我注意到,如果我偶然的包括=>废话它甚至不会破坏? – AnApprentice

+0

我已经更新了我的回答。 –