Rails 5 ActiveRecord запрос для поиска самой последней вложенной ассоциации - PullRequest
0 голосов
/ 08 мая 2019

У меня проблемы с написанием запроса, который включает вложенные ассоциации. Кто-нибудь знает, что мне здесь не хватает? У меня есть модель Appeal, у которой много Hearing с, а Hearing принадлежит HearingDay. Я хочу найти все апелляции, где слушание disposition == "held", но если апелляция имеет много слушаний, я хочу проверить только disposition самого последнего слушания, которое определяется атрибутом hearing_day.scheduled_for слушания, который является date поле. Например, если апелляция состоит из 2 слушаний, и у самого старого - held, а у самого последнего - другой, то я не хочу, чтобы он был включен в результаты.

Вот все запросы, которые я пробовал на апелляции:

Этот дает мне один дополнительный результат, которого я не ожидаю:

joins(:hearings => :hearing_day)
  .where("hearing_days.scheduled_for = (SELECT MAX(hearing_days.scheduled_for) FROM hearing_days WHERE hearing_days.id = hearings.hearing_day_id)")
  .where(hearings: { disposition: "held" })

Этот дает мне дополнительный результат, которого я не ожидаю:

joins(:hearings => :hearing_day)
  .where("hearing_days.scheduled_for = (SELECT MAX(hearing_days.scheduled_for) FROM hearing_days WHERE hearings.appeal_id = appeals.id AND hearing_days.id = hearings.hearing_day_id)")
  .where(hearings: { disposition: "held" })

Этот результат не включает ожидаемый результат, но он успешно исключает тот, который был ошибочно включен в запросы выше:

joins(:hearings => :hearing_day)
  .where("hearing_days.scheduled_for = (SELECT MAX(hearing_days.scheduled_for) FROM hearing_days WHERE hearings.appeal_id = appeals.id)")
  .where(hearings: { disposition: "held" })

Спасибо за любую помощь, которую вы можете предоставить.

...