Я пытаюсь обновить несколько записей в моей базе данных, но мне не повезло.
Я хочу, чтобы эти манипуляции были атомарными (используя транзакцию).
Я хочу обновить несколько атрибутов в таблице 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, также должны быть удалены / обновлены обратно. Но этого не происходит.
Кто-нибудь может помочь?
Спасибо