Rails 4"where" - 查询"has_many belongs_to" - 关系,搜索特定计数

mpa*_*tan 3 ruby sql postgresql activerecord ruby-on-rails

这应该是一个简单的查询,但我遇到了正确的Rails语法问题.我正在使用Rails 4.1.1和Postgresql(9.3).我有一个模型用户和模型公司.用户有一家公司,公司有很多用户.我正在努力寻找拥有超过5个用户的所有公司.

class Company < ActiveRecord::Base
   has_many :users, dependent: :destroy
   ...

class User < ActiveRecord::Base
   belongs_to :company
   ...
Run Code Online (Sandbox Code Playgroud)

问题与此类似:查找计数大于零的所有记录

如果我尝试上面提到的类似解决方案:

Company.joins(:users).group("company.id").having("count(users.id)>5")
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "company"
LINE 1: ... "users"."company_id" = "companies"."id" GROUP BY company.id...
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几个不同的查询来获得结果,但我没有这样做.我可以使用SQL,但它似乎很愚蠢,因为这应该可以使用ActiveRecord轻松实现.

感谢所有的答复 :)

xda*_*azz 7

应该用"companies.id"而不是"company.id".

Company.joins(:users).group("companies.id").having("count(users.id)>5")
Run Code Online (Sandbox Code Playgroud)

如果你想与0个用户建立公司,你必须使用LEFT JOIN:

Company.joins('LEFT JOIN users ON companies.id = users.company_id').group("companies.id").having("count(users.id) = 0")
Run Code Online (Sandbox Code Playgroud)