Forum: Rails-ES Obtener el código sql de Active Record

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C4d14ee8561174a269e5d0d7b936a146?d=identicon&s=25 Jorge Alvarez (Guest)
on 2009-02-24 19:16
(Received via mailing list)
Hola:

Necesitaba obtener el sql que active_record genera para guardarlo y
poder
ejecutarlo posteriormente.

Tras mucho Googlear por la web no he visto nada ni a nadie con mi mismo
problema (por lo que igual el que tiene necesidades raras soy yo).

Así que he tirado por el camino de enmedio y he modificado Active Record
para que me de lo que le pido.

Este es el código resultante:

module ActiveRecord
  class Base
    class << self
      def view_sql(*args)
        options = args.extract_options!
        validate_find_options(options)
        set_readonly_option!(options)
        construct_finder_sql(options)
      end
    end
  end
end

Guardad el código anterior en un fichero dentro de la carpeta
config/initializers (ejemplo: view_sql.rb)

Ahora ya podemos obtener el código ejecutando nuestras consultas
habituales
con el núevo método:

Ejemplos:

Persona.view_sql(6)  nos devolverá 'select * from personas where id=6'

Admite todas las opciones de find :conditions, :order, :joins.....
etc...
Si a alguien le puede servir, pues perfecto y si lo pueden mejorar, pues
fantástico.

Saludos,

Jorge Alvarez
www.informatica32.com
Eb24172664eda6fe8a2f39c91709b258?d=identicon&s=25 Albert Callarisa (xarc)
on 2009-02-24 19:19
(Received via mailing list)
Si usas mongrel ya salen los SQL por el log del servidor por defecto

2009/2/24 Jorge Alvarez <jorgegorka@gmail.com>
39086eb3d9a1437276d07c08ea0c3821?d=identicon&s=25 Guillermo Álvarez Fernández (Guest)
on 2009-02-25 13:12
(Received via mailing list)
El 24/02/2009, a las 19:16, Jorge Alvarez escribió:
>   end
> end
>
>
>

Como sugerencia se me ocurre una sintanxis chula, que para depurado me
vendría bien a veces.

sql = ActiveRecord::Base.track_sql do
   Person.find(8).update_atrribute(:name, 'pepe')
end

sql # select * fron persons where id = 8; update name = 'pepe' where
id = 8;

Por poner un ejemplo.



---
Guillermo Álvarez Fernández
guillermo@cientifico.net
http://cientifico.net
This topic is locked and can not be replied to.