increment_counter间接操纵lock_version吗?

时间:2012-08-30 00:16:36

标签: ruby-on-rails ruby-on-rails-3 activerecord optimistic-locking

increment_counter是否间接操纵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上的救援?

1 个答案:

答案 0 :(得分: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总是递增。