0

与えられた 2 つのモデル:

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 をクエリし、1 つのクエリと各ループごとのクエリですべてのグループを招待する方法が見つからなかったため、多数のクエリが発生することです。使用方法に関する提案には、次のようなものがあります。

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

1 に答える 1

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)
于 2012-06-22T01:34:54.427 に答える