Сортировка по столбцам в обеих таблицах при использовании предложения «includes» в Ruby on Rails - PullRequest
0 голосов
/ 20 декабря 2018
Account.includes(:month_forecasts)
   .where(month_forecasts: { field: :value })

У меня есть вышеприведенное предложение includes.У меня есть 2 поля F1 в Account таблице и F2 в MonthForecast таблице.Мне нужно отсортировать приведенный выше результат по обоим этим полям.

Account.includes(:month_forecasts)
   .where(month_forecasts: { field: :value }).order(:f1)

Я знаю, что выше будет сортировать по F1, но, поскольку F2 находится в таблице MonthForecast, я не уверен, какСортировка по этому полю.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я бы использовал joins для создания этой ассоциации, если связь с month_forecasts не для всех данных, то она будет иметь только соответствующие ссылки на результаты.Также оставьте поля, описанные в order, которые помогут в следующем чтении.

Account.joins(:month_forecasts).where(
    month_forecasts: { field: :value }).order('accounts.f1, month_forecasts.f2')
0 голосов
/ 20 декабря 2018

Просто используйте имена полей в качестве строки

Account.left_outer_joins(:month_forecasts)
  .where(month_forecasts: { field: :value }).order('f1, month_forecasts.f2')

Обратите внимание, вам нужно использовать left_outer_joins (или joins, если вы не хотите видеть счета без прогнозов) вместо includes длясортировка

ОБНОВЛЕНИЕ:

По умолчанию выбирается только accounts.*, но вы можете добавить выбор со всеми столбцами из второй таблицы

Account.left_outer_joins(:month_forecasts).select('accounts.*, month_forecasts.*')
  .where(month_forecasts: { field: :value }).order('f1, month_forecasts.f2')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...