使用PostgreSQL使用ActiveRecord准备和执行语句

ala*_*ani 5 activerecord ruby-on-rails insert prepared-statement

我正在尝试使用ActiveRecord通过预准备语句插入值.但是,每次我尝试:

conn = ActiveRecord::Base.connection
conn.prepare "SELECT * from sampletable where id = $1"
conn.execute 3
Run Code Online (Sandbox Code Playgroud)

在第二个陈述之后,我得到:

NoMethodError: undefined method `prepare' for
#<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000001027442c8>
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我正在运行Rails 3.2.1和Ruby 1.9.2

更新:

我解决了这个问题.感谢您的回复,但它对PostgreSQL无效.做到这一点的方法是:

stmt = "SELECT * from sampletable where id = $1 and name = $2"
values = [ { value: 1}, { value: "henry" } ]
Run Code Online (Sandbox Code Playgroud)

其中values是一个散列数组,每个都指定一个值,$ 1绑定到第0个散列,$ 2绑定到数组中的第二个散列,依此类推

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

女士们,先生们,这是有效的!

Dre*_*awn 4

从编辑的问题正文中复制答案,以便从“未回答”过滤器中删除该问题:

我解决了这个问题。感谢您的回复,但它不适用于 PostgreSQL。这样做的方法是:

stmt = "SELECT * from sampletable where id = $1 and name = $2"
values = [ { value: 1}, { value: "henry" } ]
Run Code Online (Sandbox Code Playgroud)

其中,values 是哈希数组,每个哈希数组指定一个值,$1 绑定到第 0 个哈希,$2 绑定到数组中的第二个哈希,依此类推

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

女士们先生们,这很有效!

~阿拉拉尼的回答