首页 > 解决方案 > Rails 在具有 has_many 关系的模型上使用“where”

问题描述

我有 2 个模型,Account并且User

class Account
  has_many :users
end

class User
  belongs_to :account
end

我的问题的相关模型详细信息是:

如何正确列出Users属于premium帐户的所有内容?此外,我如何列出所有帐户中的所有用户 premium因为可以有任意数量的premium帐户。

我已经尝试了以下几种变化:

Account.where(subscription: "premium").users # undefined method users

User.where(subscription: "premium") # returns nothing

Account.where(subscription: "premium").each do |account|
  account.users # seems to return an array?
end

标签: ruby-on-railsrubyactiverecordactivemodel

解决方案


你想要的是一个左内连接:

User.joins(:account)
    .where(accounts: { subscription: "premium" })

这将返回用户表中与联接表匹配的任何记录。

如何正确列出属于高级帐户的所有用户?

如果您的意思是属于特定帐户的用户,您将#users在该特定帐户上调用该方法。

account = Account.eager_load(:users).find(1)
account.users

推荐阅读