我可以通过activerecord关系创建activerecord关联(使用祖先gem时)吗?

时间:2012-10-26 16:31:09

标签: ruby-on-rails ruby-on-rails-3 activerecord ancestry

我在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

当然,这不起作用。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

在群组模型中定义这样的方法。

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 查询以获取用户,结果已经是不同的用户设置。

答案 1 :(得分:1)

可能你应该定义方法,它返回所有后代的用户。 所以你的模型看起来像这样:

  class Group < ActiveRecord::Base
    has_ancestry

    has_many :users

    def descendants_users
      self.subtree.map(&:users).flatten.compact.uniq
    end
  end