Сортировать запрос по атрибуту отношений - PullRequest
2 голосов
/ 21 февраля 2012

В моем приложении есть таблицы с сортируемыми столбцами. Столбцы могут быть отсортированы по атрибутам настоящей модели или даже связанных моделей. Однако в некоторых случаях модель имеет несколько ассоциаций с другой моделью.

В этом примере разделы имеют несколько отношений, которые должны быть загружены вдоль него. отношение1 и отношение2 фактически являются записями из одной и той же таблицы базы данных. Если я выполню запрос и попытаюсь отсортировать по учителю, он на самом деле будет сортировать по учащимся, потому что они приходят из одной таблицы, и именно это используется для сортировки.

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 голосов
/ 22 февраля 2012

Обратите внимание на псевдоним для учителей:

LEFT OUTER JOIN `users` `teachers_sections`

Вы должны иметь возможность использовать этот псевдоним:

order("teachers.#{sort_column} #{sort_direction}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...