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