1

インクリメントカウンターは間接的に操作していlock_versionますか?

lock_version同時実行性に対してテストしていますが、増加していることに気付きました。とはいえ、私はから救助していませんActiveRecord::StaleObjectError

http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.htmlによると

"Active Records support optimistic locking if the field lock_version is present." 

これは、自動的increment_counterにレスキューをトリガーすることを意味しますか?ActiveRecord::StaleObjectError

4

1 に答える 1

2

フィールドlock_versionは、レコードを更新するときに保存時に常にインクリメントされます。lock_versionが3のレコードがあるとします。それを保存すると、次のように実行されます。

UPDATE some_table SET foo = "bar", lock_version = 4 WHERE id = some_id AND lock_version = 3

更新された行の量がゼロに等しい場合、ActiveRecord::StaleObjectErrorがスローされます。基本的に、更新された行がゼロに等しい場合は、別のリクエストがすでにレコードを更新したことを意味します。このため、lock_versionは常に増分します。

于 2012-08-30T01:04:23.510 に答える