减少rails中每行的db值

use*_*840 0 ruby ruby-on-rails

我想要一种方法来减少列(信用)中的每个值一定的数量.我试过了:

User.all.map! {|user| user.credit -= 50} 
Run Code Online (Sandbox Code Playgroud)

它只是映射信用,而不是用户.我觉得正确的答案是使用

User.update_all(something)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用此方法更新相对于其先前值的值.

这似乎是一个常见的要求,所以我猜测有一个标准的方法.

suf*_*leR 5

您可以update_all在此示例中将字符串传递给like:

User.update_all("credit = credit - 50")
Run Code Online (Sandbox Code Playgroud)

SQL将被exectued:

UPDATE "users" SET credit = credit - 50
Run Code Online (Sandbox Code Playgroud)