Безопасный для базы данных параллелизм в ROR - PullRequest
5 голосов
/ 25 октября 2011

Попытка выяснить, как обрабатывается параллелизм в Ruby On Rails.

Как получить сегмент кода для блокировки строк в базе данных и принудительного отката при необходимости?

Точнее говоря, Есть ли способ принудительно завершить определенный сегмент кода, если не откат? Я ищу, чтобы добавить историю в транзакции в моем проекте, и я не хочу, чтобы транзакции фиксировались безистория сохраняется, поэтому, если сервер попадает между двумя действиями (сохранение транзакции и сохранение истории), база данных может перейти в недопустимое состояние.

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

Вы хотите посмотреть на транзакции ActiveRecord и пессимистическую блокировку .

Account.transaction do
  account = Account.find(account_id)
  account.lock!

  if account.balance >= 100
    account.balance -= 100
    account.save
  end
end
1 голос
/ 25 октября 2011

Да, у вас есть способ реализовать транзакцию в Rails. Пример:

YourModel.transaction do
  rec1.save!
  rec2.save!
end

Подробнее здесь

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