假设我有一个拥有多个用户的帐户模型.帐户有一个布尔"活动"列.如何让所有属于"活动"帐户的用户?
@users_of_active_accounts = User.?
Run Code Online (Sandbox Code Playgroud)
谢谢!
Dog*_*ert 81
试试这个:
User.joins(:account).where(:accounts => { :active => true })
Run Code Online (Sandbox Code Playgroud)
Sim*_*tsa 51
您需要加入帐户表并合并适当的帐户范围:
User.joins(:account).merge(Account.where(:active => true))
Run Code Online (Sandbox Code Playgroud)
Jar*_*ard 10
在Account模型的关联中使用where子句:
class Account < ActiveRecord::Base
has_many :users, -> {where(active: true)}
Run Code Online (Sandbox Code Playgroud)
其他查询将起作用,但如果您始终关心活动用户,则在关联级别进行过滤将正确封装过滤器,并在将来避免您的头痛.
更新:
您还可以在同一个表上指定2个关系:
class Account < ActiveRecord::Base
has_many :users
has_many :active_users, -> {where(active: true)}, :class_name => 'User'
Run Code Online (Sandbox Code Playgroud)
第二次更新:
在重新阅读问题之后,我现在看到我的答案没有回答这个问题.这是我对这个问题的回答:
User.where(account: Account.where(active: true))
Run Code Online (Sandbox Code Playgroud)
第3次更新:这是一个具有active_users属性的用户模型示例
class User < ActiveRecord::Base
belongs_to :account
def self.active
where(account: Account.where(active: true))
end
end
Run Code Online (Sandbox Code Playgroud)
这样做可以让它与其他用户查询内联:
User.active.where(created_at: (1.week.ago..0.day.ago)).count
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30051 次 |
最近记录: |