Rails belogs_to包括选择查询 - ActiveModel::MissingAttributeError

Rails belogs_to includes select query - ActiveModel::MissingAttributeError

提问人:Akshay Goyal 提问时间:4/6/2023 更新时间:4/6/2023 访问量:56

问:

我有两张表:

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

提前致谢

Ruby-on-Rails 协会

评论

0赞 maya_nk99 4/6/2023
你有桌子里面的coumlm吗?order_idorder_lines
0赞 Akshay Goyal 4/6/2023
是的,我在表中order_id列order_lines
0赞 maya_nk99 4/6/2023
将查询修改为如下内容:OrderLine.includes(:order).select(:id, :order_id).first

答:

1赞 Sebastián Palma 4/6/2023 #1

正因为如此;

class ActiveRecord::Associations::Preloader::Association::LoaderRecords
  ...

  def owner_key_name
    reflection.join_foreign_key
  end
end

提取调用中表的外键。由于 ActiveRecord 需要知道如何联接哪些表并加载哪些记录,因此成为 select 子句中的必填列。includesorder_lines.order_id

要修复它,只需将该列添加到您的选择中;order_id

OrderLine.includes(:order).select(:id, :order_id).first