ActiveRecord::Base.connection
memiliki quote
metode yang mengambil nilai string (dan secara opsional objek kolom). Jadi Anda bisa mengatakan ini:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
Perhatikan jika Anda berada dalam migrasi Rails atau objek ActiveRecord, Anda dapat mempersingkatnya menjadi:
connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{connection.quote(baz)}
EOQ
PEMBARUAN: Seperti yang ditunjukkan @kolen, Anda harus menggunakan exec_update
sebagai gantinya. Ini akan menangani kutipan untuk Anda dan juga menghindari kebocoran memori. Tanda tangannya bekerja sedikit berbeda:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
Di sini parameter terakhir adalah larik tupel yang mewakili parameter bind. Di setiap tupel, entri pertama adalah tipe kolom dan yang kedua adalah nilainya. Anda dapat memberikan nil
untuk jenis kolom dan Rails biasanya akan melakukan hal yang benar.
Ada juga exec_query
,, exec_insert
dan exec_delete
, tergantung pada apa yang Anda butuhkan.