我不想使用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"
答案 0 :(得分:1)
是的,update_all
也释放了锁定。
但是:在您提供的代码中,您将行锁定在事务中。它不会释放此锁,因为事务无论如何都锁定该行。它将与事务提交一起发布。