2

在我的应用程序中,Rails 已经预加载了许多对象。

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

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

这可能吗?

4

2 回答 2

6

您可以使用 ActiveRecords update_all 语句:

Object.where(:id => 1).update_all("balance = balance + 1")
于 2012-10-18T10:43:40.553 回答
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

于 2013-03-24T15:55:32.427 回答