LEFT JOIN en Rails ActiveRecord sin condiciones
Frecuentes
Visto 506 veces
1
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.
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas sql ruby-on-rails activerecord or haz tu propia pregunta.
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. - CMW
Hola, gracias por la sugerencia. Desafortunadamente no tuvo ningún efecto. Todavía 4 consultas SQL. - NiklasN
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. - CMW
resolviste tu problema? - Fivell
No, desafortunadamente no :/ Solo fui con las consultas adicionales, por ahora - NiklasN