gpt4 book ai didi

activerecord - 为什么 activerecord 乐观锁定每行只工作一次?

转载 作者:行者123 更新时间:2023-12-02 15:49:25 29 4
gpt4 key购买 nike

不知何故,我总是在周五收到这些。

我之前的问题是关于同样的问题,但我现在可以缩小范围:

我一整天都在研究这个问题,试图理解它。我有一个带有 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

...什么也没有发生。事实证明,我获得正确(抛出异常)行为的唯一一次是当第一个和第二个的 lock_version 为 0 时。但是,在第一次保存之后,它再也不会为 0。这到底是怎么回事?

我使用的是 ruby​​ 1.8.6 和 active record 2.2.2

谢谢...

最佳答案

当您第二次调用first.save时,some_attribute_field的值已经等于“first”,activerecord知道这一点,因此它不会在数据库中更新到lock_version不会增加。第二次保存有效,因为数据库从未随“第一次”更改。

尝试将第二个测试中的值更改为“first”以外的值,以便它与数据库中的值不同。

关于activerecord - 为什么 activerecord 乐观锁定每行只工作一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813535/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com