4

我在我的 rails 项目中使用祖先 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

这将执行1次查询来获取 subtree_ids 和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 回答