Могу ли я создать ассоциацию 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
Другие вопросы по тегам