2012-12-19 21 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> 

我該怎麼辦?我運行的Rails 3.2.1和Ruby 1.9.2

UPDATE:

我解決了這個問題。感謝您的迴應,但它不適用於PostgreSQL。做到這一點的方法是:

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

其中值是散列的陣列,每個指定一個值,$ 1綁定到第0散列,$ 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/unanswered-question-answered-in-comments,瞭解爲什麼這會有所幫助。)謝謝! – DreadPirateShawn

回答

4

複製從編輯的身體問題的答案,爲了從「未答覆」過濾器中刪除了這個問題:

我解決了這個問題。感謝您的回覆,但它並不適用於PostgreSQL的 。做到這一點的方法是:

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

其中值是散列的陣列,每個指定一個值,$ 1是 結合到第0散列,$ 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