2013-11-21 81 views
2

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

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

我到处寻找 - 文档以圈子形式出现。

我怎么会告诉Postgres的执行

从foo其中foo.bar =删除?

绑定“巴兹”的Q唛,并使用活动记录的对象,发现者,你-BEAUT子一样的东西和所有其余的做没有

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

(PS,没有:我不想参数挤进字符串自己并执行它作为unparameterised SQL这是错误,这意味着我不必担心消毒的数据。)

+0

您是否在尝试创建某种ETL系统? – Chandranshu

回答

2

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

UPDATE:

从柱转述:

对于删除方法参数使用该模板第一,接着查询名称(其可以是零),然后值的阵列,以注入声明。所以像这样:

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

谢谢,这是我需要知道的。现在唯一的问题是 - 文档中的这个地方是什么?我该如何找到自己,这是怎么做到的? ...好吧,我在连接aciverecord/connectionadapters/databasestatements中找到了doco,但它不是非常有帮助。 我不得不说 - 我发现Ruby开发中的“由Cookbook示例代码”方面并不符合我的喜好。 但是,谢谢。我可以继续这个。 – PaulMurrayCbr