问题
I am using the ancestry gem in my rails project to create a hierarchy of groups. A group can belong to a parent group and can have many children groups. Each group can have many users who belong to a group. The model looks like this:
class Group < ActiveRecord::Base
has_ancestry
has_many :users
end
I would love to be able to get all users for the descendants of a group, something like this:
class Group < ActiveRecord::Base
has_ancestry
has_many :users
has_many :descendants_users, through: :descendants
end
which, of course, doesn't work.
Any suggestions?
回答1:
Define a method like this in your Group model.
def descendants_users
User.joins(:groups).where(:group_id => self.subtree_ids) # Use descendant ids if you dont't want 'self' users
end
This will perform 1 query to fetch subtree_ids and 1 query to fetch users, and the result is already distinct users set.
回答2:
May be you just should to define method, that returns all of descendants' users. So your model could look like this:
class Group < ActiveRecord::Base
has_ancestry
has_many :users
def descendants_users
self.subtree.map(&:users).flatten.compact.uniq
end
end
来源:https://stackoverflow.com/questions/13090848/can-i-create-an-activerecord-association-through-an-activerecord-relation-when