2015-06-11 3 views
0

Возможно ли начать транзакцию в одном действии и отменить откат в другом? Вот почему я хочу сделать это:Объединение отката в двух рельсах действия 4

Я делаю приложение, в котором пользователь может произвести заказ и этот порядок может иметь несколько услуг, поэтому у меня есть 2 модели, связанные Заказать и службы. Существует форма с некоторыми переключателями и textarea, где пользователь собирается ввести характеристики услуги, и у нее есть две кнопки отправки, одна для добавляет дополнительные услуги к этому заказу, а вторая следующая. когда пользователь нажмет на следующий будет перенаправлен на страницу, где он может видеть все службы и кнопку для сохранить, если пользователь нажмет на сохранить, тогда я хочу сохранить заказ и все услуги (5 службы генерируют 5 записей в таблице Service и одну запись в таблице Order). Но если пользователь начнет добавлять сервисы и в какой-то момент решит оставить страницу, я не хочу ничего сохранять.

Я думаю, что это может быть сделано с каким-то откатом или, может быть, есть другой способ.

ответ

2

короткий ответ: нет нет действительно.

Более длинный ответ: сделки по своему определению являются атомарными. Они делают то, что должно быть сделано внутри них, затем либо совершать, либо откатываться.

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

Способ, которым обычно решается, заключается в добавлении государства в ваш заказ. например, булевский столбец, называемый «совершенным» или что-то подобное. Заказ может быть создан в состоянии «не зафиксировано», и все ваши другие действия будут выполняться только с «совершенными» заказами. Если пользователь покидает страницу, вы можете очистить процесс уборки любых незафиксированных заказов (т. Е. Удалить их, если неподтвержденный заказ превышает 2 часа).

+0

Спасибо за ответ. –