2

私のアプリケーションでは、多くのオブジェクトがすでに Rails によってプリロードされています。

ここで、これらのオブジェクト属性のいくつかを更新したいと思います。残念ながら、これらのオブジェクトの一部は、データベース内の同じオブジェクトに関連しています。myObject.balance ( ) に値を追加しても、 differentButSameObjectmyObject.balance += valueの属性 balanceは同じ値のままです。

解決策の 1 つは、オブジェクトをリロードすることです。次のように値を更新したいと思います: 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 に答える