Sni*_*gus 5 activerecord locking optimistic optimistic-locking
不知何故,我总是在星期五得到这些.
我之前的问题是关于同样的问题,但我现在可以稍微缩小一点:
我整天都在玩这个,试图理解它.我有一个带有lock_version列的表,由此指定:
add_column :jobs, :lock_version, :integer, :default=>0
Run Code Online (Sandbox Code Playgroud)
我做这样的事情:
foo = job.create!
first = Job.find(foo.id)
second = Job.find(foo.id)
Run Code Online (Sandbox Code Playgroud)
然后我验证第一个和第二个引用相同的对象 - 它们的ID是相同的,我使用mysql命令行工具在数据库中看到该行.
first.some_attribute_field = 'first'
second.some_attribute_field = 'second'
first.save
second.save
Run Code Online (Sandbox Code Playgroud)
到目前为止没问题.我正确得到一个ActiveRecord :: StaleObjectError异常. 但是:
first = Job.find(foo.id)
second = Job.find(foo.id)
first.some_attribute_field = 'first'
second.some_attribute_field = 'second'
first.save
second.save
Run Code Online (Sandbox Code Playgroud)
......没有任何反应.事实证明,我唯一一次得到正确(抛出异常)行为是第一次和第二次的lock_version为0.然而,在第一次保存之后,它再次为0.究竟是什么呢?
我正在使用ruby 1.8.6和活动记录2.2.2
谢谢...
当你第一次调用some.attribute_field的值已经等于"first"时,activerecord知道这一点,因此它不会在db中更新到lock_version不会增加.第二次保存工作,因为db从未使用"first"更改.
尝试将第二个测试中的值更改为"first"以外的值,以使其与db中的值不同.
| 归档时间: |
|
| 查看次数: |
2282 次 |
| 最近记录: |