ActiveRecord::Base.connection
tem um quote
método que recebe um valor de string (e, opcionalmente, o objeto de coluna). Então você pode dizer o seguinte:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
Observe se você estiver em uma migração Rails ou um objeto ActiveRecord, você pode encurtar para:
connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{connection.quote(baz)}
EOQ
ATUALIZAÇÃO: como @kolen aponta, você deve usar em seu exec_update
lugar. Isso cuidará da cotação para você e também evitará o vazamento de memória. A assinatura funciona de maneira um pouco diferente:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
Aqui, o último parâmetro é uma matriz de tuplas que representam os parâmetros de vinculação. Em cada tupla, a primeira entrada é o tipo de coluna e a segunda é o valor. Você pode dar nil
para o tipo de coluna e o Rails geralmente fará a coisa certa.
Existem também exec_query
, exec_insert
e exec_delete
, dependendo do que você precisa.