Tengo un :include que genera un outer join. El tema es que tengo que
ponerle una condición al ON del join:
User.find :all, :include => :addresses, :conditions => ["addresses.is_active
= 1"]
Ojo que el comportamiento de :include cambió...
En realidad cambia si no hay condiciones sobre la otra tabla, si hay se pasa al
modo anterior, al join.
Pero esto no te funciona?
User.find :all, :include => :addresses, :joins => 'LEFT OUTER JOIN
addresses ON addresses.user_id = users.id AND addresses.is_active =
1', :conditions => ["addresses.is_active = 1"]
Algo así andaría, pero el tema es que tengo :includes anidados y no miré cómo
anidar :joins. El código actual que anda (está en otro idioma pero creo que se
entiende) es:
primero creo el has_many 'on the fly', durante a ejecución ("tradukadoj_laux_lingvo" es
"traducciones por idioma" y :tradukado es un join model, :lingvo es idioma y :tradukoj
las traducciones reales.):
Frazo.has_many "tradukadoj_laux_lingvo".to_sym,:foreign_key => :originalo_id,
:class_name => 'Tradukado',:conditions => ['tradukadoj.lingvo_id =
?',self.al_lingvo.id]
y después obtengo las frases que me interesan usando el has_many que recién
creé. Al hacerlo así el join recibe la condición adicional.
@frazoj = kunteksto.frazoj.find(:all,
:include => [:teksto,{:tradukadoj_laux_lingvo => {:traduko => :teksto}}])
Lo genial de agregar el has_many, que así anda, es que con el eager loading la
vista no necesita ni un solo dato más, tiene todo a mano. Lo malo es que no sé
el impacto real de andar agregando el has_many, por ahora a ciegas en cada
request. Tendría que usar algún tipo de reflection para saber si ya está o no,
prender una bandera, darle un nombre diferente según el idioma ... no sé, a eso
no llegué.
Eduardo.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar