Откат внешней транзакции не работает рельсы - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь обновить несколько записей в моей базе данных, но мне не повезло.

Я хочу, чтобы эти манипуляции были атомарными (используя транзакцию). Я хочу обновить несколько атрибутов в таблице 1 и несколько атрибутов в таблице 2.

Если процесс обновления завершится неудачно в какой-либо из таблиц, я хочу, чтобы все изменения, которые были сделаны в обеих таблицах, были отменены.

Ниже мой неработающий код:

    def make_settings(account,attributeToUpdate,attribute_type)
    A.transaction do
      B.transaction do
          if attribute_type == "ADVANCED"
          self.user.create_or_update_attribute(attributeToUpdate[0],attributeToUpdate[1].to_s)
          end
     if attribute_type == "BASIC"
        us = account.user.user_setting.reload
        us[attributeToUpdate[0]] = attributeToUpdate[1]
        us.save!
      end
    end
  end 
end

Что происходит сейчас: - Если тип атрибута ADVANCED, немногие атрибуты успешно обновляются в таблице A. Затем поток переходит к обновлению атрибутов в таблице B, но при этом что-то идет не так.

Теперь я хочу, чтобы при обновлении в таблице B произошел сбой, записи, которые были добавлены / обновлены в таблице A, также должны быть удалены / обновлены обратно. Но этого не происходит.

Кто-нибудь может помочь? Спасибо

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