在我的应用程序中,Rails已经预装了很多对象。
现在我想更新其中一些对象属性。不幸的是,其中一些对象与我数据库中的同一对象有关。当我向myObject.balance(myObject.balance += value
)添加值时, differentButSameObject 中的属性余额仍具有相同的值。
一种解决方案可能是重新加载对象。我更喜欢像这样更新值:
UPDATE myTable SET balance = balance + 10 WHERE id = 1
。
这可能吗?
答案 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