我想在rails中执行一个相当讨厌的递归更新查询。这意味着我想编写一些带有参数的原始postgres sql,并在rails控制器中执行它。
我该怎么做?我在activerecord中找不到PreparedStatement类,似乎没有任何名为'native'的方法,我试过ActiveRecord :: Base.connection.exec_delete,我已经查看了源代码 - 只是不能,不能正常工作进行。
我到处寻找 - 文档圈了。
我如何告诉postgres执行
从foo中删除foo.bar =?
将'baz'绑定到q标记,并使用活动记录对象,查找程序,您自己的子集以及其他所有内容,不使用执行此操作。
我只想用一些绑定执行一个准备好的语句。这有多难?
(PS,而且:我不想自己将参数插入字符串并将其作为非参数化的sql执行。它是错误的,这意味着我不得不担心消毒数据。 )
答案 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']])