LEFT JOIN en Rails ActiveRecord sin condiciones

Tengo los siguientes modelos

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

Y estoy haciendo la siguiente consulta:

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

Está haciendo ahora 4 consultas SQL.

Si agrego las siguientes condiciones

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

hace una UNIÓN EXTERNA IZQUIERDA en todas las tablas unidas

¿Hay alguna forma de hacer que AR haga una UNIÓN EXTERNA IZQUIERDA en las tablas incluidas cuando no se usan condiciones?

También traté de usar :joins(:product_supplier_infos => [:supplier, :product_supplier_info_packings]) que termina con CROSS JOIN que no quiero y .joins(["LEFT OUTER JOIN product_supplier_infos...", "LEFT OUTER ÚNASE a proveedores... ", "IZQUIERDA EXTERNA ÚNASE product_supplier_info_packings ..."]) pero no tuvo ningún efecto. Todavía tengo 4 consultas SQL.

preguntado el 12 de junio de 12 a las 19:06

Mi sensación inmediata es que podría intentar agregar .all a esa declaración Product.includes(...), porque .includes debería ser exactamente lo que está buscando. -

Hola, gracias por la sugerencia. Desafortunadamente no tuvo ningún efecto. Todavía 4 consultas SQL. -

Usé .all para esto antes, pero probar ese mismo código ahora también divide las consultas. Es posible que AR intente ser inteligente sobre cuándo hacer uniones y cuándo no acelerar las cosas. Seguiré cavando. -

resolviste tu problema? -

No, desafortunadamente no :/ Solo fui con las consultas adicionales, por ahora -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.