यदि आप prepare
का उपयोग करना चाहते हैं ऐसे में आपको कुछ बदलाव करने होंगे:
-
PostgreSQL ड्राइवर क्रमांकित प्लेसहोल्डर देखना चाहता है (
$1
,$2
, ...) प्रश्नवाचक चिह्न नहीं हैं और आपको अपने तैयार किए गए विवरण को एक नाम देने की आवश्यकता है:ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
-
कॉलिंग अनुक्रम है
prepare
उसके बादexec_prepared
:connection = ActiveRecord::Base.connection.raw_connection connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1") st = connection.exec_prepared('some_name', [ id ])
उपरोक्त दृष्टिकोण मेरे लिए ActiveRecord और PostgreSQL के साथ काम करता है, आपका PG::Connection.open
यदि आप ठीक से कनेक्ट कर रहे हैं तो संस्करण काम करना चाहिए।
दूसरा तरीका यह है कि आप स्वयं को उद्धृत करें:
conn = ActiveRecord::Base.connection
conn.execute(%Q{
delete from my_table
where id = #{conn.quote(id)}
})
ActiveRecord आमतौर पर आपकी पीठ पीछे यही काम करता है।
डेटाबेस के साथ सीधे इंटरैक्ट करने से रेल के साथ कुछ गड़बड़ हो जाती है क्योंकि रेल के लोग नहीं सोचते कि आपको इसे कभी भी करना चाहिए।
यदि आप वास्तव में बिना किसी हस्तक्षेप के एक पंक्ति को हटाने का प्रयास कर रहे हैं, तो आप delete
. का उपयोग कर सकते हैं :
हटाएं ()
[...]
पंक्ति को बस एक SQL DELETE
के साथ हटा दिया जाता है रिकॉर्ड की प्राथमिक कुंजी पर बयान, और कोई कॉलबैक निष्पादित नहीं किया जाता है।
तो आप बस इतना ही कह सकते हैं:
MyTable.delete(id)
और आप एक साधारण delete from my_tables where id = ...
डेटाबेस में।