ActiveRecord::Base.connection
tiene un quote
método que toma un valor de cadena (y opcionalmente el objeto de columna). Entonces puedes decir esto:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
Tenga en cuenta que si está en una migración de Rails o en un objeto ActiveRecord, puede acortarlo a:
connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{connection.quote(baz)}
EOQ
ACTUALIZACIÓN: como señala @kolen, debería usar exec_update
en su lugar. Esto manejará las cotizaciones por usted y también evitará pérdidas de memoria. Sin embargo, la firma funciona de manera un poco diferente:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
Aquí, el último parámetro es una matriz de tuplas que representan parámetros de enlace. En cada tupla, la primera entrada es el tipo de columna y la segunda es el valor. Puede ceder nil
por el tipo de columna y Rails normalmente hará lo correcto.
También hay exec_query
, exec_insert
y exec_delete
, dependiendo de lo que necesita.