正在获取过时的对象错误。乐观锁:它如何工作?

MCB

我认为我已经消除了所有问题,但是我不确定我对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.)

我尝试过的事情:

为了查看是否正在加载另一个实例,我puts "CALLED !!!!"after_initialize回调中添加了一个对象,但它仅打印一次。

self.changed从错误中解救后检查并返回["updated_at", "failed_view_attempts", "failed_view_at"]

MCB

需要将lock_version列默认设置为零(0)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章