所以我有一个更新声明:
UPDATE billing_infos set card_number = ''
FROM orders
WHERE billing_infos.order_id = orders.id ...);`
我如何找到此声明更新的记录数?
我在我的控制台中通过ActiveRecord::Base.connection.execute()
执行此操作,因此只返回<PG::Result:0x007f9c99ef0370>
个对象。
任何人都知道如何使用SQL或Rails方法做到这一点?
答案 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