2012-12-19 7 views
5

Ich versuche, Werte über eine vorbereitete Anweisung mit ActiveRecord einzufügen. Doch jedes Mal wenn ich versuche:Vorbereiten und Ausführen von Anweisungen mit ActiveRecord mit PostgreSQL

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

Nach der zweiten Anweisung, die ich erhalten:

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

Was soll ich tun? Ich bin mit Rails 3.2.1 und Ruby 1.9.2

UPDATE:

ich das Problem gelöst. Danke für die Antwort, aber es hat nicht für PostgreSQL funktioniert. Die Art und Weise, es zu tun ist:

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

die Werte sind ein Array von Hashes, die jeweils einen Wert angeben, 1 $ auf den 0-te Hash-gebunden ist, wird $ 2 in den 2.-Hash in dem Array gebunden und so weiter

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

Und das, meine Damen und Herren, funktioniert!

+0

Wenn Sie mitspielst die Lösung, wie Sie Ihre eigene Antwort rekapitulieren, ich werde meine Antwort löschen. (Siehe http://meta.stackexchange.com/questions/90263/unanswered-questions-answered-in-comments zur Erläuterung, warum dies hilfreich ist.) Danke! – DreadPirateShawn

Antwort

4

die Antwort aus dem editierten Frage Körper kopieren, um diese Frage aus den „Unbeantwortet“ Filter zu entfernen:

ich das Problem gelöst. Danke für die Antwort, aber es funktionierte nicht für PostgreSQL. Die Art und Weise, es zu tun ist:

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

die Werte sind ein Array von Hashes, die jeweils einen Wert angeben, 1 $ an den 0-te Hash-gebunden ist, $ 2, gebunden an die zweiten Hash in der Anordnung und so on

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

Und das, meine Damen und Herren, funktioniert!

~ Antwort pro alalani

+1

Anstatt eine neue db-Verbindung neu zu erstellen ('con = PG :: Connection.new (: dbname =>" development_DB ")), denke ich, es wäre besser, eine bestehende Verbindung von Ihrem Adapter zu bekommen, so:' con = ActiveRecord :: Base.connection.raw_connection' Aber sonst funktioniert es gut! – qix

Verwandte Themen