Sanitizando queries com ActiveRecord


Leia em menos de um minuto

No artigo Executando SQL no Rails mostrei como trabalhar com SQL no ActiveRecord. Para sanitizar parâmetros da query, utilizei o método quote. O grande problema de utilizar este método é que se você tiver uma quantidade muito grande de parâmetros vai ser, como diz o Lucas Húngaro, um trabalho de presidiário!

O ActiveRecord possui um método protegido chamado sanitize_sql_array, que permite trabalhar com todas as interpolações de valores. Para utilizá-lo mais facilmente, basta fazer um monkey patch na classe ActiveRecord::Base.

class ActiveRecord::Base
  def self.sanitize_query(query, options)
    sanitize_sql_array([query, options])
  end
end

Agora, você pode utilizar queries desta maneira:

options = {:title => "Simples Idéias"}
sql = User.sanitize_query("select * from blogs where title = :title", options)
User.connection.execute(sql)