ActiveRecord::Base.connection
имеет quote
метод, который принимает строковое значение (и, возможно, объект столбца). Итак, вы можете сказать это:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
Обратите внимание, если вы выполняете миграцию Rails или объект ActiveRecord, вы можете сократить это до:
connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{connection.quote(baz)}
EOQ
ОБНОВЛЕНИЕ: как указывает @kolen, вы должны использовать exec_update
вместо этого. Это обработает цитирование за вас, а также предотвратит утечку памяти. Однако подпись работает немного иначе:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
Здесь последний параметр - это массив кортежей, представляющих параметры привязки. В каждом кортеже первая запись - это тип столбца, а вторая - значение. Вы можете nil
указать тип столбца, и Rails обычно поступает правильно.
Есть также exec_query
, exec_insert
и exec_delete
, в зависимости от того, что вам нужно.