我正在使用我的铁轨项目中的祖先宝石来创建组的层次结构。一个小组可以属于父子组,并且可以有许多子女群体。每个组都有许多属于组的用户。模型看起来像这样:
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
当然这不起作用。
有什么建议?
在组模型中定义这样的方法。
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 查询以获取用户,结果已经是不同的用户设置了。
可能是您应该定义方法,以返回所有后代的用户。因此您的模型看起来像这样:
class Group < ActiveRecord::Base
has_ancestry
has_many :users
def descendants_users
self.subtree.map(&:users).flatten.compact.uniq
end
end