/ active_recordrailsruby

Como obtener el sql generado por Active Record

A veces puede ser necesario guardar el contenido de una consulta para poder ejecutarlo más tarde.

En Rails Active Record no proporciona una forma sencilla de obtener el sql que ha generado. Podemos verlo en el log pero no acceder a él directamente para poder guardarlo.

Por ello y después de un par de horas de Googleo he creado el siguiente código que extiende el objeto Active Record para darme lo que necesito.

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 :condtions, :order, :joins..... etc...