2012-02-21 83 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}")