Я хочу создать запись модели после создания другой записи модели.
В основном я настроил Devise для создания действий в контроллере регистрации, но это не идеально. Я хотел бы инкапсулировать в транзакцию на случай, если что-то не получится при создании второй модели, если первая не будет создана или откатана.
Но, кажется, есть лучший метод, использующий обратные вызовы внутри модели, а не настраивая контроллер.
некоторые ссылки:
Rails при создании транзакции ,
Rails: исключение при остановке after_create при сохранении и http://webonrails.com/2012/08/28/activerecord-after_commit-hook/
Хотя я даже не уверен, что понял концепцию.
Что я понимаю, так это то, что если я использую after_create :create_model_2_instance
внутри первого файла модели, и это не удается, то создание записи этой самой модели также не удастся. Это бинарный результат для обеих моделей ..?
Где я немного запутался в последней предоставленной ссылке http://webonrails.com/2012/08/28/activerecord-after_commit-hook/ Автор говорит:
" Большинство разработчиков используют обратные вызовы ActiveRecord after_create / after_update / after_destroy для создания фонового задания, истечения срока действия кэша и т. Д., Но они не осознают, что эти обратные вызовы по-прежнему заключены в транзакции базы данных, они, вероятно, получили неожиданные результаты, такие как приложение поставило в очередь задание, но запись не была создана / обновлена (откат транзакции)."
Таким образом, в основном он применяет тот факт, что after_create инкапсулируется в транзакцию. Допустим, я ставлю в очередь фоновое задание, которое запускается через 3 часа после создания записи. В случае неудачи исходная запись будет уничтожена / откатана через 3 часа после ее создания?