SELECT users.*, addresses.* FROM users LEFT OUTER JOIN addresses ON
addresses.user_id = users.id and addresses.is_active = 1 WHERE NOT
addresses.address_id = null
No debería ser mucho peor que lo que vos propones. En otras palabras,
que pasa si mandás algo así:
User.find :all, :include => :addresses, :conditions =>
["addresses.is_active = 1 and (not null(addresse.address_id))"]
Pasa que ambas condiciones se van para el Where. Ése es el problema que tengo,
no tengo cómo decir que una condición vaya al join. Al quedar las dos en el
where en realidad la segunda está implicada por la primera, es decir, si hay un
campo que no es nulo (is_active) entonces es que se encontró un registro.
La idea es, obvio, no tener que usar find_by_sql ...
has_many :active_addresses, :class_name => :address, :conditions =>
['addresses.is_active = ?',@address_status]
El problema con ese enfoque es cuando se evalúa la variable, si
funciona igual que con named_scope, tendrías que usar un lambda para
que se evalúe cada vez que ejecutás el método correspondiente, pero en
ese caso por ahí es más simple definir un método, y usar un parámetro.
Sí, el método es lo más fácil en general. Podés extender la relación, pero
para que el join incorpore la condición necesita que ésta esté en la
asociación, lo cual tiene lógica.
No sabía qué era un lambda, así que lo estudié. No me doy cuenta cómo se
podría usar ...
Eduardo.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar