如何在 AR 中使用多个连接进行查询

How to do a query with mulitple joins in AR

我的简化数据库:

例如,我想得到 way_id = 2 的所有 pois(通过 track_ways & poi_tracks)

我的模型中有一个范围:

scope :by_way, ->(way_id) { joins(:ways).where('ways.id = ?', way_id) }

我在查询中使用了这个范围:

Poi.joins(:tracks).where(tracks: Track.by_way(2))

但结果不是预期的

剧透:

Poi.joins(poi_tracks: [track: [:track_ways, :ways]]).where('ways.id = ?', 2)

首先加入poi_tracks

Poi.joins(:poi_tracks).all

加入曲目

Poi.joins(poi_tracks: [:track]).all

加入track_ways

Poi.joins(poi_tracks: [track: [:track_ways]]).all

加入方式

Poi.joins(poi_tracks: [track: [:track_ways, :ways]])

申请方式条件

 Poi.joins(poi_tracks: [track: [:track_ways, :ways]]).where('ways.id = ?', 2)