Rails关联查询includes+select报ActiveModel::MissingAttributeError问题求助
报错原因
- 使用
includes(:order)预加载关联的Order模型时,ActiveRecord需要order_id外键来建立OrderLine与Order的关联关系。 - 但
select(:id)仅查询了OrderLine的id字段,未包含order_id,导致ActiveRecord在尝试关联时找不到必要的外键,触发ActiveModel::MissingAttributeError。
修复方法
方法1:在select中加入order_id字段
如果需要预加载Order模型,必须将关联所需的外键纳入查询字段:
OrderLine.includes(:order).select(:id, :order_id).first
这样ActiveRecord就能通过order_id匹配对应的Order记录,完成预加载。
方法2:移除includes(无需关联Order数据时)
如果业务逻辑不需要获取关联的Order信息,直接去掉includes(:order)即可:
OrderLine.select(:id).first
方法3:用pluck替代select(仅需id值时)
如果只是想获取OrderLine的id值,不需要返回ActiveRecord对象,使用pluck更高效:
OrderLine.pluck(:id).first
内容的提问来源于stack exchange,提问作者Akshay Goyal
相关产品推荐
相关产品推荐

