如何在具有深层关联的activerecord查询中执行OR

时间:2018-04-28 16:35:10

标签: sql ruby-on-rails activerecord

我的位置具有关联的城市和州,每个城市和州都有与之关联的报告。该报告的属性为“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 :(得分:0)

它应该是这样的:

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