2012-12-19 19 views
5

का उपयोग कर ActiveRecord के साथ कथन तैयार और निष्पादित करें मैं ActiveRecord का उपयोग कर तैयार कथन के माध्यम से मूल्यों को सम्मिलित करने का प्रयास कर रहा हूं। हालांकि, हर मैं कोशिश:PostgreSQL

conn = ActiveRecord::Base.connection 
conn.prepare "SELECT * from sampletable where id = $1" 
conn.execute 3 

दूसरा बयान के बाद, मैं मिलता है:

NoMethodError: undefined method `prepare' for 
#<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000001027442c8> 

मुझे क्या करना चाहिए? मैं रेल 3.2.1 और रूबी चल रहा हूँ 1.9.2

अद्यतन:

मैं समस्या हल हो। प्रतिक्रिया के लिए धन्यवाद, लेकिन यह PostgreSQL के लिए काम नहीं किया। जिस तरह से यह करने के लिए है:

stmt = "SELECT * from sampletable where id = $1 and name = $2" 
values = [ { value: 1}, { value: "henry" } ] 

जहां मूल्यों हैश की एक सरणी, प्रत्येक एक मूल्य को निर्दिष्ट है, $ 1, 0 हैश के लिए बाध्य है $ 2 और इतने पर

सरणी में 2 हैश के लिए बाध्य है
con = PG::Connection.new(:dbname => "development_DB") 
con.prepare("insert", stmt) 
con.exec_prepared("insert", values) 
con.close() 

और यह, महिलाओं और सज्जनो, काम करता है!

+0

आप खेल अपने खुद के जवाब के रूप में समाधान संक्षेप में कर रहे हैं, मैं अपने जवाब हटा देंगे प्रति जवाब। (यह देखने में सहायता के लिए http://meta.stackexchange.com/questions/90263/unansited-question-ansredit-in-comments देखें।) धन्यवाद! – DreadPirateShawn

उत्तर

4

संपादित सवाल शरीर से जवाब प्रतिलिपि बनाई जा रही, "अनुत्तरित" फिल्टर से इस सवाल को हटाने के लिए:

मैं समस्या हल हो। प्रतिक्रिया के लिए धन्यवाद, लेकिन यह PostgreSQL के लिए काम नहीं किया। जिस तरह से यह करने के लिए है:

stmt = "SELECT * from sampletable where id = $1 and name = $2" 
values = [ { value: 1}, { value: "henry" } ] 

जहां मूल्यों हैश की एक सरणी है, प्रत्येक एक मूल्य निर्दिष्ट करते समय, $ 1 0 हैश करने के लिए बाध्य है, $ 2 और इतने पर सरणी में 2 हैश के लिए बाध्य है

con = PG::Connection.new(:dbname => "development_DB") 
con.prepare("insert", stmt) 
con.exec_prepared("insert", values) 
con.close() 

और यह, महिलाओं और सज्जनो, काम करता है!

~ alalani

+1

एक नए डीबी कनेक्शन को पुनर्निर्मित करने की बजाय ('con = PG :: Connection.new (: dbname =>" development_DB ")'), मुझे लगता है कि आपके एडाप्टर से कोई मौजूदा कनेक्शन प्राप्त करना बेहतर होगा, जैसे: 'con = ActiveRecord :: Base.connection.raw_connection' लेकिन अन्यथा, यह बहुत अच्छा काम करता है! – qix