不知何故,我总是在星期五得到这些。
我之前的问题是关于同样的问题,但我现在可以缩小范围:
我整天都在玩这个,试图理解它。我有一个带有 lock_version 列的表,指定如下:
add_column :jobs, :lock_version, :integer, :default=>0
我做这样的事情:
foo = job.create!
first = Job.find(foo.id)
second = Job.find(foo.id)
然后我验证第一个和第二个引用同一个对象 - 它们的 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
谢谢...