我认为我已经清除了所有问题,但是我不确定我是否完全理解OL。一般来说,假设你和我在一个团队中来保持foo的最新状态。我在一个房间里,决定节省时间,自己更新foo。一分钟后,你也有了同样的想法,并登录到编辑页面以更新它。如果我先完成会发生什么?如果你先完成会发生什么?在配置失败的情况下,它如何区分某人是否正在编辑或阅读。如果我使用catch
并重新加载以更新锁,则会丢失所有更改,如何解决这个问题?在这里,重新执行更新非常简单,但可能是更复杂表单对象的一部分。
我的具体问题出现在我加载了一个副本到浏览器中(据我所知是最好的),然后忘记了它,然后在我的控制台中加载了另一个副本(锁:0?),无法用陈旧的对象错误更新我的控制台中的副本。注意到浏览器上的内容。关闭了我的控制台。尝试重新加载我的浏览器,结果也得到了陈旧的对象错误。这是代码失败的地方:
=> 7: self.update_attributes({
8: failed_view_attempts: self.failed_view_attempts += 1,
9: failed_view_at: Time.now
10: })
11: end
(byebug) self
#<Product id: 12... lock_version: 0>
#=> ActiveRecord::StaleObjectError (Attempted to update a stale object: Product.)
我尝试过的事情:
为了查看是否加载了另一个实例,我在after_initialize
回调中添加了puts "CALLED !!!!"
,但它只打印了一次。
在从错误中恢复并返回self.changed
后检查,得到了["updated_at", "failed_view_attempts", "failed_view_at"]