Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 更新ActiveRecord(Rails)中的当前值_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 更新ActiveRecord(Rails)中的当前值

Ruby on rails 更新ActiveRecord(Rails)中的当前值,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,在我的应用程序中,Rails已经预加载了很多对象 现在我想更新一些对象属性。不幸的是,其中一些对象与我的数据库中的同一个对象相关。当我向myObject.balance(myObject.balance+=value)添加值时,differentButSameObject中的属性balance仍然具有相同的值 一种解决方案可能是重新加载对象。我更愿意像这样更新值: 更新myTable SET balance=balance+10,其中id=1 这可能吗?您可以使用ActiveRecords up

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

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

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


这可能吗?

您可以使用ActiveRecords update\u all语句:

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

可以将以下代码添加到模型中。它使用update_计数器执行适当的查询(例如,合并):


非常感谢。我使用Rails 2.3.8,因此我的命令现在是
Object.update_all([“balance=balance+?”,value],:id=>id)

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