Как сделать ИЛИ в запросе activerecord с глубокими ассоциациями - PullRequest
0 голосов
/ 28 апреля 2018

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

Как я могу запросить местоположения, в которых либо связанный город, либо штат имеют good_weather = true?

Вот что у меня есть, но оно не работает:

Location.includes(city: [:report], state: [:report])
.where("cities.reports.good_weather = true OR states.reports.good_weather = true")
.references(:cities, :states, :reports)

Модели выглядят так:

Location has_one :city, has_one :state
City belongs_to :location, belongs_to :report
State belongs_to :location, belongs_to :report
Report has_one :city, has_one :state

PG :: UndefinedTable: ERROR: недопустимая ссылка на запись предложения FROM для таблицы «отчеты» ^ СОВЕТ: есть запись для таблицы «отчеты», но на нее нельзя ссылаться из этой части запроса.

1 Ответ

0 голосов
/ 29 апреля 2018

Это должно быть примерно так:

Location.joins(:city, :state)
        .joins("INNER JOIN reports 
                ON reports.good_weather = true AND 
                   (reports.id = cities.report_id OR 
                    reports.id = states.report_id)")
        .distinct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...