On Apr 7, 2010, at 3:48 PM, [email protected] wrote:

On 07/04/2010 15:44, Lean wrote:
On Apr 7, 2010, at 3:28 PM, Damian Janowski wrote:

2010/4/7 Lean <[email protected]>:
Una expresión con un :joins de la siguiente manera, no me da error, pero
tampoco me da las columnas de la otra tabla...

@hosts = Host.find(:all, :joins => [:cliente])

No me acuerdo mucho, pero:

@hosts = Host.find(:all, :include => [:cliente])


Lamentablemente el :include da exáctamente lo mismo, ya lo había probado y no hay diferencia... Como si no incluyera nada...

Gracias de todos modos.

_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Como te han dicho por ahi... en el modelo tenes las relaciones?

Y por otra parte... deberias hacer otro thread para este tema, y no como respuesta a un trhead ya hecho qeu no guarda relacion.



_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Perdón, no entendí lo de hacer otro thread. Mi última respuesta no tiene relación con el subject? Me perdí...

Realmente muy agradecido con todos los que respondieron y dieron consejos!


Les cuento: Tengo los modelos mapeados según:

app/models/cliente.rb:

class Cliente < ActiveRecord::Base
        has_many :hosts
end

app/models/host.rb:

class Host < ActiveRecord::Base
        belongs_to :cliente
end

Mis tablas no tienen más que id (PK), y los campos que menciono.
Muy interesantes los consejos de "olvidate de SQL, trabajá con tus entidades", sin embargo, este problema se inició con otro problema sobre un modelo mucho más complejo y generó la inquietud de probar sobre algo más pavo. Resultó que tampoco funcionó.

Les cuento el porqué de mi "capricho" con los joins: Tengo que hacer una búsqueda entre dos tablas: una de unos 40 millones de registros, relacionada vía FK con otra que tiene un millón y medio. Estas dos están relacionadas con 5 tablas más (bien chiquitas). Resulta que mis queries se volvieron complicados y -creanme- no me queda otra que utilizar los joins pero a través de un espantoso find_by_sql... :-(

Imagínense que con este volúmen de datos, por cada registro de la tabla grande, rails me hace otro select para ubicar los registros en la tabla más chica. Ergo, una única consulta desencadena unas 40.000 consultas de un tirón cuando hago algo como:

@hosts.map {|h| [h.cliente.nombre, h.hostname]}

Quiero evitar todas esas consultas y entonces recurrí a los :joins. Probé con :include, probé con muchas cosas...

Por supuesto, ese volúmen no aplica en un problema como Host <-> Cliente, pero sí en los datos de captura de logs de un grupo muy grande de servidores (de ahi los 40M de registros!). Por simplicidad para con la pregunta a ustedes, resumí mi duda a un simple problema (donde reproduje el mismo problema que en el caso grande!)

Gracias a todos, nuevamente.

Leandro.








_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a