Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用联接时,ActiveRecord返回空关联_Ruby On Rails_Postgresql_Activerecord - Fatal编程技术网

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])

您需要什么?您可以发布订单、提示和行项目关系。