4

Rails プロジェクトでancestry gemを使用して、グループの階層を作成しています。グループは親グループに属することができ、多くの子グループを持つことができます。各グループには、グループに属する多数のユーザーを含めることができます。モデルは次のようになります。

class Group < ActiveRecord::Base
  has_ancestry

  has_many :users
end

次のように、グループの子孫のすべてのユーザーを取得できるようにしたいと思います。

class Group < ActiveRecord::Base
  has_ancestry

  has_many :users
  has_many :descendants_users, through: :descendants
end

もちろん、これは機能しません。

助言がありますか?

4

2 に答える 2

2

Group モデルでこのようなメソッドを定義します。

def descendants_users
    User.joins(:groups).where(:group_id => self.subtree_ids) # Use descendant ids if you dont't want 'self' users
end

これにより、subtree_ids を取得するための1 つのクエリと、ユーザーを取得するための1つのクエリが実行され、結果は既に個別のユーザー セットになります。

于 2013-02-06T17:22:07.927 に答える
1

子孫のすべてのユーザーを返すメソッドを定義する必要があるかもしれません。したがって、モデルは次のようになります。

  class Group < ActiveRecord::Base
    has_ancestry

    has_many :users

    def descendants_users
      self.subtree.map(&:users).flatten.compact.uniq
    end
  end
于 2013-02-06T17:14:29.093 に答える