对关系属性的查询排序

时间:2012-02-21 04:17:34

标签: ruby-on-rails ruby-on-rails-3 activerecord

我的应用程序包含可排序列的表。列可以根据当前模型的属性甚至相关模型进行排序。但是,在某些情况下,模型与另一个模型有多个关联。

在此示例中,Sections具有必须在其旁边加载的多个关系。 relation1和relation2实际上是来自同一数据库表的记录。如果我运行查询并尝试对教师进行排序,它实际上会对学生进行排序,因为它们来自同一个表,而这就是用于排序的内容。

Section.includes(:teacher, :students)
       .order(sort_column + ' ' + sort_direction)

生成此SQL:

SELECT DISTINCT `sections`.id
FROM `sections` 
  LEFT OUTER JOIN `sections_students` ON `sections_students`.`section_id` = `sections`.`id`
  LEFT OUTER JOIN `users` ON `users`.`id` = `sections_students`.`user_id` 
  LEFT OUTER JOIN `users` `teachers_sections` ON `teachers_sections`.`id` = `sections`.`teacher_id`
ORDER BY users.first_name asc LIMIT 30 OFFSET 0

如何对特定关系进行排序?有没有办法使用别名来做到这一点?

1 个答案:

答案 0 :(得分:0)

注意教师的别名:

LEFT OUTER JOIN `users` `teachers_sections`

您应该可以使用该别名:

order("teachers.#{sort_column} #{sort_direction}")