1

我有以下型号

class Product < ActiveRecord::Base
end

class Supplier < ActiveRecord::Base
end

class ProductSupplierInfo < ActiveRecord::Base
  has_many :product_supplier_info_packings, :inverse_of => :product_supplier_info
  belongs_to :supplier
end

class ProductSupplierInfoPacking < ActiveRecord::Base
  belongs_to :product_supplier_info, :inverse_of => :product_supplier_info_packings
end

我正在执行以下查询:

rows = Product.includes(:product_supplier_infos => [:supplier, :product_supplier_info_packings])

它现在正在进行 4 个 SQL 查询。

如果我添加以下条件

.where("product_supplier_infos.name = ?", "foobar")

它在所有连接的表上进行 LEFT OUTER JOIN

有没有办法让 AR 在不使用条件时在包含的表上进行 LEFT OUTER JOIN?

我还尝试使用 :joins(:product_supplier_infos => [:supplier, :product_supplier_info_packings]) 最终得到我不想要的 CROSS JOIN 和 .joins(["LEFT OUTER JOIN product_supplier_infos...", "LEFT OUTER加入供应商...", "LEFT OUTER JOIN product_supplier_info_packings ..."]) 但它没有任何效果。我仍然有 4 个 SQL 查询。

4

0 回答 0