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
UPDATE:ตามที่ @kolen ชี้ให้เห็นคุณควรใช้exec_update
แทน สิ่งนี้จะจัดการการเสนอราคาให้คุณและหลีกเลี่ยงการรั่วไหลของหน่วยความจำ ลายเซ็นทำงานแตกต่างกันเล็กน้อยแม้ว่า:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
ที่นี่พารามิเตอร์สุดท้ายคืออาร์เรย์ของสิ่งที่เป็นตัวแทนของพารามิเตอร์การผูก ในแต่ละทูเปิลรายการแรกคือประเภทคอลัมน์และรายการที่สองคือค่า คุณสามารถnil
ระบุประเภทคอลัมน์และ Rails มักจะทำในสิ่งที่ถูกต้อง
นอกจากนี้ยังมีexec_query
, exec_insert
และexec_delete
ขึ้นอยู่กับสิ่งที่คุณต้องการ