使用postgres在ruby / rails中准备语句

时间:2013-11-21 07:05:34

标签: ruby-on-rails postgresql ruby-on-rails-4

我想在rails中执行一个相当讨厌的递归更新查询。这意味着我想编写一些带有参数的原始postgres sql,并在rails控制器中执行它。

我该怎么做?我在activerecord中找不到PreparedStatement类,似乎没有任何名为'native'的方法,我试过ActiveRecord :: Base.connection.exec_delete,我已经查看了源代码 - 只是不能,不能正常工作进行。

我到处寻找 - 文档圈了。

我如何告诉postgres执行

从foo中删除foo.bar =?

将'baz'绑定到q标记,并使用活动记录对象,查找程序,您自己的子集以及其他所有内容,不使用执行此操作。

我只想用一些绑定执行一个准备好的语句。这有多难?

(PS,而且:我不想自己将参数插入字符串并将其作为非参数化的sql执行。它是错误的,这意味着我不得不担心消毒数据。 )

1 个答案:

答案 0 :(得分:2)

请参阅Rails中的PreparedStatements讨论('使用准备好的语句') - http://blog.daniel-azuma.com/archives/216。显示调用哪些方法以及如何设置参数格式。

更新:

从帖子转述:

对于delete方法,参数首先使用模板,然后是查询名称(可以是nil),然后是要注入语句的值数组。像这样:

row_count = connection.delete("DELETE FROM foo WHERE foo.bar=$1", nil, [[nil, 'baz']])