Rails中基于到达机场IATA码查询嵌套关联的航班
完善航班查询:根据到达机场IATA码筛选航班
没问题,我来帮你搞定这个查询!你已经搭好了基础的关联框架,但还需要调整关联路径并补充筛选条件——因为Flight和ArrivalAirport是通过Route间接关联的,不能直接直接关联:arrival_airport,得通过route这个中间模型来串联。
完整的查询代码
# 替换成你实际要查询的目标IATA码,比如"PEK"、"JFK" target_iata = "目标IATA码" @search_results = Flight .joins(route: :arrival_airport) # 链式关联:Flight -> Route -> ArrivalAirport .where(airports: { iata_code: target_iata })
代码细节解释
joins(route: :arrival_airport):这是Rails处理嵌套关联的简洁写法,告诉ActiveRecord先关联flights和routes表,再通过routes的arrival_airport_id关联到airports表,精准指向到达机场的数据。where(airports: { iata_code: target_iata }):通过airports表的iata_code字段做筛选,因为arrival_airport对应的就是airports表,直接用表名作为键即可匹配到目标字段。
可选优化:避免表名冲突(多机场关联场景)
如果后续需要同时关联出发机场,为了避免airports表的引用歧义,可以用SQL原生语句给表起别名:
@search_results = Flight .joins("JOIN routes ON flights.route_id = routes.id") .joins("JOIN airports AS arrival_airports ON routes.arrival_airport_id = arrival_airports.id") .where(arrival_airports: { iata_code: target_iata })
不过在当前仅筛选到达机场的场景下,第一种简洁写法完全够用~
内容的提问来源于stack exchange,提问作者alt-ja
相关产品推荐
相关产品推荐

