我可以通过ActivereCord关系(使用祖先GEM时)创建ActivereCord关联



我正在使用我的铁轨项目中的祖先宝石来创建组的层次结构。一个小组可以属于父子组,并且可以有许多子女群体。每个组都有许多属于组的用户。模型看起来像这样:

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

相关内容

  • 没有找到相关文章

最新更新