Go to English Blog

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)