Как справиться с оптимистической блокировкой в ​​случае updated_all? - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь реализовать Оптимистическую блокировку для состояния гонки.Для этого я добавил дополнительный столбец lock_version в Продукт: Модель через миграцию.

Продукт: Новое поле модели:

#  lock_version                       :integer(4)      default(0), not null

Когда я пытаюсь save! Оптимистическая блокировказа работой.Записи, updated_at и lock_version получают обновления.

Однако в существующем исходном коде мы используем updated_all, который не обновляет updated_at и lock_version.Так что оптимистическая блокировка не работает.Подскажите пожалуйста, как реализовать оптимистичный для updated_all

Product.where(:id => self.id).update_all(attributes)
      self.attributes = attributes

1 Ответ

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

Мы можем просто сделать как. (В случае, если обратный вызов не нужен.)

Product.where(:id => self.id, lock_version: params[:lock_version]).update_all('price = 0, lock_version = lock_version + 1')

Это будет искать запись с соответствием lock_version и обновлять lock_version.

...