You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:37:47