我不想使用save!
方法,悲观主义者的锁(self.lock!(会使用update_all
方法吗?
lock!
使用save!
方法。
Account.transaction do
self.lock!
account1 = Account.find(...)
account1.balance -= 100
account1.save!
end
lock!
使用update_all
方法。
Account.transaction do
self.lock!
attributes["balance"] = recalculate_balance
Account.where(:id => self.id).update_all(attributes)
end
Rails::VERSION::STRING => "3.2.22.4"
是的,update_all
也会释放锁。
但是:在您提供的代码中,您将锁定事务中的行。它不会释放此锁,因为事务无论如何都会锁定此行。它将与事务提交一起被释放。