Ruby: Будет ли блокировка пессимиста (self.lock!) Работать с помощью update_all? - PullRequest
0 голосов
/ 12 октября 2018

Я не хочу использовать метод 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"

1 Ответ

0 голосов
/ 12 октября 2018

Да, update_all также снимает блокировку.

Но: В указанном вами коде вы блокируете строку внутри транзакции.Это не снимет эту блокировку, потому что транзакция блокирует эту строку в любом случае.Он будет выпущен с фиксацией транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...