Ruby on rails 使用联接时,ActiveRecord返回空关联
我有两个问题。第一个返回与三个项目的关联:Ruby on rails 使用联接时,ActiveRecord返回空关联,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我有两个问题。第一个返回与三个项目的关联: Order.where(aggregation_key: params[:aggregation_key]) 第二个返回空关联: Order.joins(:tips, :line_items).where(aggregation_key: params[:aggregation_key]) 唯一的区别是第二个连接两个表。是什么导致结果为空关联 更新: 在进一步的实验之后,我发现如果我从joins子句中删除:tips,那么它将返回一个完整的关联。不幸
Order.where(aggregation_key: params[:aggregation_key])
第二个返回空关联:
Order.joins(:tips, :line_items).where(aggregation_key: params[:aggregation_key])
唯一的区别是第二个连接两个表。是什么导致结果为空关联
更新:
在进一步的实验之后,我发现如果我从joins子句中删除
:tips
,那么它将返回一个完整的关联。不幸的是,我需要在声明中加入后面条款的提示。如果有人知道为什么会发生这种情况,我将不胜感激。ActiveRecord正在进行内部联接,因此如果它找到的订单在提示和行项目中没有相关记录,您将返回一个空关联
左外连接
Order.joins("LEFT OUTER JOIN tips ON tips.order_id = orders.id").where(aggregation_key: params[:aggregation_key])
您可以为此使用ActiveRecord的include方法:
Order.includes(:tips, :line_items).where(aggregation_key: params[:aggregation_key])
更新:
或者你可以:
左连接
Order.joins("LEFT JOIN tips ON tips.order_id = order.id
LEFT JOIN line_items ON line_items.order_id = orders.id")
.where(aggregation_key: params[:aggregation_key])
您需要什么?您可以发布订单、提示和行项目关系。