2012-06-22 3 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 

и др. и т. д. Проблема заключается в том, что это приводит к большому числу запросов, потому что я не нашел способ использования include (:) для запроса для всех 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

Я обновил свой ответ, посмотри. –

Смежные вопросы