2012-02-21 72 views
2

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

在此示例中,节具有多个关系,必须将它们一起加载。 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 

我如何排序在一个特定的关系?有没有办法使用别名来做到这一点?

回答

0

通知别名为教师:

LEFT OUTER JOIN `users` `teachers_sections` 

您应该能够使用别名:

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