【发布时间】:2010-10-23 05:57:16
【问题描述】:
不知何故,我总是在星期五得到这些。
我之前的问题是关于同样的问题,但我现在可以缩小范围:
我整天都在玩这个,试图弄明白它。我有一个带有 lock_version 列的表,指定如下:
add_column :jobs, :lock_version, :integer, :default=>0
我会这样做:
foo = job.create!
first = Job.find(foo.id)
second = Job.find(foo.id)
然后我验证 first 和 second 引用同一个对象 - 它们的 id 相同,并且我使用 mysql 命令行工具在数据库中看到该行。
first.some_attribute_field = 'first'
second.some_attribute_field = 'second'
first.save
second.save
到目前为止没有问题。我正确地得到了一个 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
...什么也没有发生。事实证明,我唯一一次得到正确(抛出异常)行为是当 first 和 second 的 lock_version 为 0 时。但是,在第一次保存之后,它不再是 0。这到底是怎么回事?
我正在使用 ruby 1.8.6 和活动记录 2.2.2
谢谢...
【问题讨论】:
标签: activerecord locking optimistic-locking optimistic