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...