如何在 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)
我的简化数据库:
例如,我想得到 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)