ActiveRecord::Base.connection
ma quote
metodę, która przyjmuje wartość ciągu (i opcjonalnie obiekt kolumny). Możesz więc powiedzieć tak:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
Zauważ, że jeśli jesteś w migracji Railsów lub w obiekcie ActiveRecord, możesz skrócić to do:
connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{connection.quote(baz)}
EOQ
AKTUALIZACJA: Jak wskazuje @kolen, powinieneś użyć exec_update
zamiast tego. Spowoduje to wycenę za Ciebie, a także pozwoli uniknąć wycieku pamięci. Podpis działa jednak nieco inaczej:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
Tutaj ostatni parametr to tablica krotek reprezentujących parametry wiązania. W każdej krotce pierwszy wpis to typ kolumny, a drugi to wartość. Możesz podać nil
typ kolumny, a jednak Railsy zwykle postępują właściwie.
Istnieją również exec_query
, exec_insert
i exec_delete
, w zależności od tego, czego potrzebujesz.