On Apr 7, 2010, at 10:05 PM, NachoKB wrote:
2010/4/7 Lean <[email protected]>
Digo:
Host.find(:all, :include => [:cliente])
y
Host.find(:all, :joins => [:cliente])
da exáctamente el mismo resultado. O sea, sólo las columnas de Host.
los objetos Host que te retornan son "los mismos" en el sentido de
que no te va a devolver un host que tiene el nombre de Cliente (y,
sigo insistiendo, no querés que así sea).
Particularmente en este caso, el caso de joins no agrega nada (por
que el joins sólo te "habilita" columnas para el :conditions), es
como si no estuviera la opción
Dicho de otra forma:
@hosts = Host.all
@hosts.each { |host| puts host.cliente.nombre }
genera N+1 query
@hosts = Host.all :include => :cliente
@hosts.each { |host| puts host.cliente.nombre }
genera 2 (DOS) queries: "eager loading" es :include
fijate que el código que utiliza la lista de hosts no cambia...
nachokb
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
Gente, el tema está resuelto.
Sólo basta comprender la utilidad de hacer eager loading
utilizando :include, donde en mi caso la cantidad de queries se redujo
considerablemente y ahora -a pesar de manejar tablas con muchos
registros- el tema se hace mucho más manejable y sobre todo, con
mejoras interesantes de performance.
Estaba más acostumbrado a manejar consultas con muchos joins y obtener
frankesteins que no tienen relación con los objetos directamente, sino
están más pegados al modelo de la base de datos.
Muchas gracias a todos,
Leandro.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar