2012-12-19 34 views
5

Tôi đang cố chèn các giá trị thông qua một câu lệnh đã chuẩn bị bằng ActiveRecord. Tuy nhiên, mỗi lần tôi cố gắng:Chuẩn bị và thực hiện các câu lệnh với ActiveRecord bằng cách sử dụng PostgreSQL

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

Sau khi tuyên bố thứ hai, tôi nhận được:

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

Tôi nên làm gì? Tôi đang chạy Rails 3.2.1 và Ruby 1.9.2

CẬP NHẬT:

Tôi đã giải quyết được sự cố. Cảm ơn bạn đã phản hồi, nhưng nó không hoạt động cho PostgreSQL. Cách để làm điều đó là:

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

nơi các giá trị là một mảng băm, mỗi chỉ định một giá trị, $ 1 được ràng buộc với băm 0, $ 2 là ràng buộc để băm thứ 2 trong mảng và vân vân

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

Và điều này, phụ nữ và quý ông, hoạt động!

+0

Nếu bạn trò chơi để tóm tắt lại các giải pháp như câu trả lời của riêng bạn, tôi sẽ xóa câu trả lời của tôi. (Xem http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments để xây dựng lý do tại sao điều này hữu ích.) Cảm ơn! – DreadPirateShawn

Trả lời

4

Sao chép câu trả lời từ cơ thể câu hỏi đã chỉnh sửa, để loại bỏ câu hỏi này khỏi bộ lọc "Chưa trả lời":

tôi đã giải quyết được vấn đề. Cảm ơn bạn đã phản hồi, nhưng nó không hoạt động cho PostgreSQL. Cách để làm điều đó là:

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

nơi các giá trị là một mảng băm, mỗi chỉ định một giá trị, $ 1 là ràng buộc với băm 0, $ 2 là ràng buộc để băm thứ 2 trong mảng và vì vậy trên

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

Và điều này, phụ nữ và quý ông, làm việc!

~ câu trả lời cho mỗi alalani

+1

Thay vì tạo lại kết nối db mới ('con = PG :: Connection.new (: dbname =>" development_DB ")'), tôi nghĩ sẽ tốt hơn nếu lấy bất kỳ kết nối hiện có nào từ bộ điều hợp của bạn, như sau: 'con = ActiveRecord :: Base.connection.raw_connection' Nhưng nếu không, nó hoạt động tuyệt vời! – qix

Các vấn đề liên quan