Rails + Postgres:如何选择更新或插入的记录数?

时间:2013-06-17 14:44:26

标签: ruby-on-rails postgresql

所以我有一个更新声明:

UPDATE billing_infos set card_number = ''
FROM orders
WHERE billing_infos.order_id = orders.id ...);`

我如何找到此声明更新的记录数?

我在我的控制台中通过ActiveRecord::Base.connection.execute()执行此操作,因此只返回<PG::Result:0x007f9c99ef0370>个对象。

任何人都知道如何使用SQL或Rails方法做到这一点?

3 个答案:

答案 0 :(得分:4)

p = ActiveRecord::Base.connection.execute(<query>)
p.cmd_status

这给出了命令状态。像

这样的东西
UPDATE 16

有关PG :: Result的更多方法,请参阅here

答案 1 :(得分:1)

虽然Vimsha所展示的解决方案肯定会有效,但还有另一种解决方案(假设您使用的是最近的pg),这可能会更好一些:

with u as (
    update ... returning 1
)
select count(*) from u;

这是一个查询,它在技术上是一个选择,所以你可以像任何其他选择一样运行它。

答案 2 :(得分:0)

正如另一个答案的评论中所提到的,最简单的方法是使用结果的 cmd_tuples 属性

result = ActiveRecord::Base.connection.execute("insert into tbl select 'test' col")
puts result.cmd_tuples

结果

1