Могу ли я создать ассоциацию activerecord через связь activerecord (при использовании гема предков)?
Я использую драгоценный камень предков в своем проекте rails для создания иерархии групп. Группа может принадлежать родительской группе и может иметь много дочерних групп. Каждая группа может иметь много пользователей, которые принадлежат к группе. Модель выглядит так:
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 ответа
Определите такой метод в вашей модели группы.
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