Rails哪里()关于模型关联的子句?

假设我有一个帐户模型has_many用户。 帐户有一个布尔“活动”列。 我如何获得属于“有效”帐户的所有用户?

@users_of_active_accounts = User.? 

谢谢!

您需要join账户表并合并适当的账户范围:

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

尝试这个:

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

在帐户模型的关联中使用where子句:

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

其他查询可以工作,但是如果您只关心活动用户,则关联级别的过滤将正确地封装filter,并在将来为您节省头痛。

更新:

您也可以在同一个表上指定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))