【发布时间】:2012-12-04 05:46:22
【问题描述】:
我有一个Department 模型,它与用户有两个关联,因此
class Department < ActiveRecord::Base
has_many :members, class_name:"User", foreign_key:"department_id"
belongs_to :director, class_name:"User", foreign_key:"director_id
end
要在列表中显示此模型,按成员数量排序,我可以这样做
@departments = Department.select("departments.*, COUNT(users.id) AS members").joins(:members).group("departments.id")
@departments = @departments.order("members ASC")
如果我想按导演关联模型中的字段 (last_name) 进行排序,我可以这样做:
@departments = Department.includes(:director)
@departments = @departments.order("users.last_name")
但是,我不能将这两个查询合并为一个允许对两者进行正确排序的查询。如果我这样做了
Department.select("departments.*, COUNT(users.id) AS members").joins(:members, :director).group("departments.id, users.last_name")
然后我得到大量重复的结果,并且我还排除了 director_id 为 nil 的结果。如何构建查询以便我可以同时按COUNT(users.id) 和基本上director.last_name 订购?
编辑:这是错误组合查询的.to_sql:
SELECT departments.*, COUNT(users.id) AS members FROM "departments"
INNER JOIN "users" ON "users"."department_id" = "departments"."id"
INNER JOIN "users" "directors_departments"
ON "directors_departments"."id" = "departments"."director_id"
GROUP BY departments.id, users.last_name
ORDER BY users.last_name DESC
【问题讨论】:
-
您能发布 Rails 用于此查询的 SQL 吗?使用
.to_sql获取原始生成的 SQL。表别名可能是这里的罪魁祸首...
标签: ruby-on-rails activerecord