Как в Ruby on Rails сделать откаты при неудачных ситуациях?
Вот допустим, есть модели:
Subscriber (подписчик)
Subscription (подписки)
Period (периоды подписок).
Все они взаимосвязаны, то есть, подписчик может иметь несколько подписок, а подписки - несколько периодов.
И вот при добавлении подписчика обязательно должна быть подписка, а у подписки - период.
Так вот при добавлении в контроллере, обычно добавляется так.
Сперва subs = Subscriber.create()
Потом subscription = Subscription.create(subscriber_id: subs.id)
period = Period .create(subscription_id : subscription.id).
Вопрос: как быть если Subscriber добавится, а остальные нет (например, сразу интернет пропал после добавления Subscriber), ведь все они должны быть обязательно?
Да вы можете написать "использовать транзакции", но это понятие растяжимое. Смогли бы вы привести пример?
Честно говоря, не вижу тут необходимости в ручном использовании транзакции. Если клиент уже отправил форму и сервер получил данные, то данные формы обработаются рельсой вне зависимости от того, у кого пропал интернет. Я бы рекомендовал сделать что-то типа такого (мне кажется такой код более идеологически верным):
ActiveRecord::Base.transaction do
subs = Subscriber.create()
subscription = Subscription.create(subscriber_id: subs.id)
period = Period.create(subscription_id : subscription.id)
end