我有两张桌子:
class Order < ActiveRecord::Base
has_many :order_lines
end
class OrderLine < ActiveRecord::Base
belongs_to :order
end
我的代码中有一个生成以下查询的工作流程:
OrderLine.includes(:order).select(:id).first
但是,上面的查询结果是
ActiveModel::MissingAttributeError: missing attribute: order_id
。我不明白为什么我会收到此错误。以及如何解决?
提前致谢
那是因为这个;
class ActiveRecord::Associations::Preloader::Association::LoaderRecords
...
def owner_key_name
reflection.join_foreign_key
end
end
提取
includes
调用中表的外键。由于 ActiveRecord 需要知道如何连接哪些表并加载哪些记录,因此 order_lines.order_id
成为 select 子句中的强制列。
要修复此问题,只需将
order_id
列添加到您的 select
;
OrderLine.includes(:order).select(:id, :order_id).first