@eldar_web

Как в 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), ведь все они должны быть обязательно?

Да вы можете написать "использовать транзакции", но это понятие растяжимое. Смогли бы вы привести пример?
  • Вопрос задан
  • 249 просмотров
Решения вопроса 2
Честно говоря, не вижу тут необходимости в ручном использовании транзакции. Если клиент уже отправил форму и сервер получил данные, то данные формы обработаются рельсой вне зависимости от того, у кого пропал интернет. Я бы рекомендовал сделать что-то типа такого (мне кажется такой код более идеологически верным):

subscriber = Subscriber.new
subscription = sub.subscriptions.build
subscription.periods.build
subscriber.save


Этот код правда потребует правильно настроенных связей.
Ответ написан
Комментировать
Dem1
@Dem1 Куратор тега Ruby on Rails
Ruby on Rails developer
ActiveRecord::Base.transaction do
  subs = Subscriber.create()
  subscription = Subscription.create(subscriber_id: subs.id)
  period = Period.create(subscription_id : subscription.id)
end
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы