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
, залежно від того, що вам потрібно.