更新ActiveRecord中的当前值(Rails)

时间:2012-10-18 10:27:58

标签: ruby-on-rails activerecord

在我的应用程序中,Rails已经预装了很多对象。

现在我想更新其中一些对象属性。不幸的是,其中一些对象与我数据库中的同一对象有关。当我向myObject.balance(myObject.balance += value)添加值时, differentButSameObject 中的属性余额仍具有相同的值。

一种解决方案可能是重新加载对象。我更喜欢像这样更新值: UPDATE myTable SET balance = balance + 10 WHERE id = 1

这可能吗?

2 个答案:

答案 0 :(得分:5)

您可以使用ActiveRecord update_all语句:

Object.where(:id => 1).update_all("balance = balance + 1")

答案 1 :(得分:0)

您可以将以下代码添加到模型中。它使用update_counters执行正确的查询(例如COALESCE):


def inc(counter, by = 1)
  raise "Cannot update column of a non-persisted model" unless persisted?
  self.class.update_counters(id, counter => by)
  increment(counter, by)
end