Ruby on rails 递减rails中每行的db值

Ruby on rails 递减rails中每行的db值,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想要一种方法将列(信用)中的每个值减少指定的数量。我试过: User.all.map! {|user| user.credit -= 50} 它只是映射信用,而不是用户。我觉得正确的答案是使用 User.update_all(something) 但我不知道如何使用此方法更新相对于其先前值的值 这似乎是一个常见的要求,所以我猜有一个标准的方法。您可以更新用户。所有的,只需迭代所有行,不要忘记保存每条记录: User.all.each do |user| user.credit = u

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

User.all.map! {|user| user.credit -= 50} 
它只是映射信用,而不是用户。我觉得正确的答案是使用

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


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

您可以更新
用户。所有的
,只需迭代所有行,不要忘记保存每条记录:

User.all.each do |user|
  user.credit = user.credit - 50
  user.save!
end
但是更有效的方法是更新数据库中的所有行。您可以发出如下SQL语句:

UPDATE users SET credit = credit - 50;
您应该使用@sufleR建议的或:


您可以将字符串传递给
update\u all
,如本例所示:

User.update_all("credit = credit - 50")
将要执行的SQL:

UPDATE "users" SET credit = credit - 50

请注意,在这种情况下不会调用验证和回调。
find_each
通常最好在迭代所有记录时使用,因为它会对回迁进行批处理。
UPDATE "users" SET credit = credit - 50