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
上的救援?
答案 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总是递增。