Подтвердить что ты не робот

Rails: где() предложение об ассоциации модели?

Предположим, что у меня есть модель учетной записи, в которой есть пользователи__пользователя. У учетных записей есть булевский "активный" столбец. Как я могу получить всех пользователей, принадлежащих к "активным" учетным записям?

@users_of_active_accounts = User.?

Спасибо!

4b9b3361

Ответ 1

Вам необходимо присоединиться к таблице учетных записей и объединить соответствующие области учетных записей:

User.joins(:account).merge(Account.where(:active => true))

Ответ 2

Попробуйте следующее:

User.joins(:account).where(:accounts => { :active => true })

Ответ 3

Используйте предложение where в ассоциации модели учетных записей:

class Account < ActiveRecord::Base
  has_many :users, -> {where(active: true)}

Другие запросы будут работать, но если вы всегда заботитесь только о активных пользователях, фильтрация на уровне ассоциации будет правильно инкапсулировать фильтр и сохранить ваши головные боли в будущем.

Update:

Вы также можете указать 2 отношения в одной таблице:

 class Account < ActiveRecord::Base
   has_many :users
   has_many :active_users, -> {where(active: true)}, :class_name => 'User'

Второе обновление:

После повторного чтения вопроса я теперь вижу, что мой ответ не ответил на вопрос. Вот мой ответ на вопрос:

User.where(account: Account.where(active: true))