我有以下关系
parent has_many children
child belongs_to parent
和下面的代码块
ActiveRecord::Base.connection.transaction do
lock_acquired = true
if child.parent.lock! and child.parent.status == 1
child.parent.update_attributes(:status => 2)
else
lock_acquired = false
end
if lock_acquired
# other code follows here
end
end
上面的代码块是为了确保一次只有一个孩子能够改变父母状态,从而锁定!方法和状态检查表达式。但不知何故它坏了。即使其中一个孩子将父状态更改为 2,另一个孩子也能以某种方式通过 if 语句。当然有多个进程正在运行,但我认为 lock 会解决这个问题。看起来像在事务块完成之前返回锁。
可能是锁的工作方式与我预期的不同。任何见解都会非常有帮助。
谢谢。