ActiveRecord::Base.connection
एक quote
विधि है जो एक स्ट्रिंग मान लेती है (और वैकल्पिक रूप से कॉलम ऑब्जेक्ट)। तो आप यह कह सकते हैं:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
ध्यान दें कि यदि आप एक रेल प्रवास या एक 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
कॉलम प्रकार के लिए दे सकते हैं और रेल आमतौर पर सही काम करेंगे।
वहाँ भी कर रहे हैं exec_query
, exec_insert
और exec_delete
, क्या आप की जरूरत पर निर्भर करता है।