Ruby on rails 带锁的东西会锁在街区里吗?
使用_lock锁定块中的所有模型还是仅锁定模型本身?例如,在下面的示例中,是否所有Ruby on rails 带锁的东西会锁在街区里吗?,ruby-on-rails,postgresql,activerecord,locking,pessimistic-locking,Ruby On Rails,Postgresql,Activerecord,Locking,Pessimistic Locking,使用_lock锁定块中的所有模型还是仅锁定模型本身?例如,在下面的示例中,是否所有项目模型都在中锁定了_lock还是仅锁定了条目模型 class Entry < ApplicationRecord enum state: [:pending, :posted] has_many :items, dependent: :destroy def post! with_lock do return unless pending? item
项目
模型都在中锁定了_lock
还是仅锁定了条目
模型
class Entry < ApplicationRecord
enum state: [:pending, :posted]
has_many :items, dependent: :destroy
def post!
with_lock do
return unless pending?
items.each { |i| i.post! }
self.posted!
end
end
end
类条目
with_lock
在单个实例上获取行级悲观锁with_lock
只是将lock和transaction语句组合成一个语句,因此它相当于:
Entity.transaction.do
实体_instance.lock!
结束
您在模型内使用_lock调用
,因此您实际上是在使用_lock
执行self。也就是说,您正在获取实体的当前实例的锁。单个项
记录不会获得锁,除非您也明确锁定它们。不过,对它们的更改确实包含在同一父事务中。这非常清楚,完美地回答了我的问题。非常感谢。