Hola,
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"]
Esto genera algo como:
SELECT users.*, addresses.* FROM users LEFT OUTER JOIN addresses ON
addresses.user_id = users.id WHERE (addresses.is_active = 1)
pero lo que necesito es:
SELECT users.*, addresses.* FROM users LEFT OUTER JOIN addresses ON
addresses.user_id = users.id and addresses.is_active = 1 [no hay WHERE]
(la diferencia es enorme, el primero me devuelve sólo los usuarios cuya
dirección está activa y el segundo todos los usuarios con campos en null si la
dirección no está activa).
El problema que tengo está descripto acá[1], como verán copié y pegué. La
solución propuesta es:
class User < ActiveRecord::Base
has_many :addresses
def self.with_conditions(assoc, conditions)
options = reflect_on_association(assoc).options
orig_conditions = options[:conditions]
options[:conditions] = conditions
yield
options[:conditions] = orig_conditions
end
end
User.with_conditions(:addresses, 'addresses.is_active = 1') do
User.find :all, :include => :addresses
end
pero la verdad es que la solución me parece que no funciona porque:
User.reflect_on_association(:tradukadoj).options[:conditions] no devuelve nada.
Eso me hace dudar. Y como eso es del 2006, de repente hay una mejor manera
ahora. ¿A alguien se le ocurre?
Gracias, Eduardo.
[1]
http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/7f7f715d917b9faa
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar