2012-12-19 14 views
5

Próbuję wstawić wartości za pomocą przygotowanej instrukcji przy użyciu ActiveRecord. Jednak za każdym razem staram:Sporządzanie i wykonywanie instrukcji za pomocą ActiveRecord przy użyciu PostgreSQL

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

Po drugie pismo, otrzymuję:

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

Co należy zrobić? Używam Rails 3.2.1 i Ruby 1.9.2

UPDATE:

I rozwiązać problem. Dzięki za odpowiedź, ale nie działała ona dla PostgreSQL. Sposobem na to jest:

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

gdzie wartości jest tablica skrótów, każde określenie wartości, $ 1 jest związany z 0th hash, $ 2 jest zobowiązany do 2 hash w tablicy i tak dalej

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

A to, panie i panowie, działa!

+0

Jeśli gra się zakręcić rozwiązanie jako swoją odpowiedź, będę usunąć odpowiedź. (Zobacz http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments w celu wyjaśnienia, dlaczego jest to pomocne). Dzięki! – DreadPirateShawn

Odpowiedz

4

Kopiowanie odpowiedź od edytowanej ciała zapytania, aby usunąć to pytanie z „Nieodebrane” filtr:

I rozwiązać problem. Dziękuję za odpowiedź, ale nie zadziałało to dla PostgreSQL. Sposobem na to jest:

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

gdzie wartości jest tablica skrótów, każde określenie wartości $ 1 związany z 0th hash, $ 2 jest zobowiązany do 2 hash w tablicy i tak na

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

A to, panie i panowie, działa!

~ odpowiedź za alalani

+1

Zamiast tworzyć nowe połączenie db ('con = PG :: Connection.new (: dbname =>" development_DB ")'), myślę, że byłoby lepiej uzyskać jakiekolwiek istniejące połączenie z twojego adaptera, na przykład: 'con = ActiveRecord :: Base.connection.raw_connection' Ale poza tym działa świetnie! – qix

Powiązane problemy