Рельсы: Заказ родителей по внушительным детским атрибутам - PullRequest
4 голосов
/ 07 мая 2019
class User
  has_many :calendars
  has_many :cars, through: :calendars
end

class Calendar
  has_many :cars
end

class Car
  # attribute `issued_at`
end

Мне нужно заказать пользователей на issued_at его автомобилей.Итак, упорядочив родительский элемент по атрибуту великого ребенка issued_at.

Вот так:

@q = User.active.joins(:cars).order('cars.issued_at').group('users.id')

Но я получаю

column "cars.issued_at" must appear in the GROUP BY clause or be used in an aggregate function

Ответы [ 2 ]

1 голос
/ 07 мая 2019

репо репродукции: https://github.com/localhostdotdev/bug/tree/ordering-parents-by-grand-children

при выполнении того же запроса я не вижу ошибок, проблема должна быть в вашей области действия active.

здесьполный запрос с scope :active, -> { where(active: true) }:

SELECT "users".*
FROM "users"
INNER JOIN "calendars" ON "calendars"."user_id" = "users"."id"
INNER JOIN "cars" ON "cars"."calendar_id" = "calendars"."id"
WHERE "users"."active" = ?
GROUP BY users.id
ORDER BY cars.issued_at
LIMIT ?

Я не могу воспроизвести вашу проблему.

1 голос
/ 07 мая 2019

Используйте distinct вместо group, чтобы избавиться от дубликатов:

@q = User.active.joins(:cars).order('cars.issued_at').distinct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...