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

Responder a