2

所以我有一个更新声明:

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

我如何找到该语句更新了多少条记录的计数?

我在控制台中执行此操作,ActiveRecord::Base.connection.execute()所以它只是返回一个<PG::Result:0x007f9c99ef0370>对象。

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

4

3 回答 3

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

这给出了命令状态。就像是

UPDATE 16

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

于 2013-06-17T14:53:54.577 回答
1

虽然 Vimsha 显示的解决方案肯定会起作用,但还有另一种解决方案(假设您使用足够近的 pg),它可能会更好一些:

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

这是一个查询,从技术上讲,它是一个选择,因此您可以像运行任何其他选择一样运行它。

于 2013-06-17T15:06:09.967 回答
0

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

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

结果

1
于 2016-12-31T02:35:14.820 回答