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))