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
, в зависимости от того, что вам нужно.