Ruby on rails 带锁的东西会锁在街区里吗?

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锁定块中的所有模型还是仅锁定模型本身?例如,在下面的示例中,是否所有
项目
模型都在
中锁定了_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。也就是说,您正在获取
实体的当前实例的锁。单个
记录不会获得锁,除非您也明确锁定它们。不过,对它们的更改确实包含在同一父事务中。

这非常清楚,完美地回答了我的问题。非常感谢。