updateall检查是否成功

时间:2016-05-11 14:12:56

标签: ruby-on-rails-4 activerecord

我正在使用update_all更新数据库中的信息

首先我的SQL看起来像这样。

UPDATE "users" SET "tag" = 'D', "fencing_token" = 199,  WHERE "user"."id" = $1 AND (fencing_token < 199)  [["id", 143]]

注意where子句fencing_token

现在我的update_all看起来像这样

User.where(id: 143).where('fencing_token < ?',199).update_all({tag: 'D',fencing_token: 199})

有没有办法知道以下SQL查询是否影响了该行。

我看到update_all返回true/false作为执行的输出。

问题?

我是否可以考虑返回值以了解查询是否影响了行(如果为true),否则不会。

2 个答案:

答案 0 :(得分:0)

(如果您没有直接在生产上运行查询)

检查您是否找到fencing_token < 199的任何记录,如下所示:

User.where(id: 143).where('fencing_token < ?',199)

你应该没有记录。

答案 1 :(得分:0)

在ActiveRecord :: Relation对象上运行update_all将返回受UPDATE影响的行数(整数)。因此,如果您期望一个查询结果并且update_all的输出为1,则可以将该记录视为受影响。

我不知道您的应用程序,但如果用户ID是该用户唯一的记录,则在Rails中更常规,通过执行User.find(143)然后使用更新方法而不是更新全部来检索它你只会更新一条记录。