Rails où () clause sur l’association modèle?

Supposons que je dispose d’un modèle de compte contenant de nombreux utilisateurs. Les comptes ont une colonne booléenne “active”. Comment puis-je obtenir tous les utilisateurs appartenant à des comptes “actifs”?

@users_of_active_accounts = User.? 

Merci!

Vous devez rejoindre la table des comptes et fusionner la scope du compte appropriée:

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

Essaye ça:

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

Utilisez une clause where dans l’association du modèle de compte:

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

Les autres requêtes fonctionneront, mais si vous ne vous souciez que des utilisateurs actifs, le filtrage au niveau de l’association encapsulera correctement le filtre et vous épargnera des problèmes à l’avenir.

Mettre à jour:

Vous pouvez également spécifier 2 relations sur la même table:

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

2ème mise à jour:

Après avoir relu la question, je vois maintenant que ma réponse n’a pas répondu à la question. Voici ma réponse à la question:

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

3ème mise à jour: voici un exemple de modèle d’utilisateur avec un atsortingbut active_users

 class User < ActiveRecord::Base belongs_to :account def self.active where(account: Account.where(active: true)) end end 

Cela vous permet de le mettre en ligne avec d'autres requêtes utilisateur:

 User.active.where(created_at: (1.week.ago..0.day.ago)).count