Использование обратного вызова вполне допустимо, если вы имеете дело с внутренним состоянием созданной вами модели.
После создания User
мне нужно было создать по умолчанию Team
.Предпочтительно избегать использования обратных вызовов для работы с другими объектами .
«after_ *» обратные вызовы в основном используются для сохранения или сохранения объекта.Как только объект сохранен, цель (т.е. ответственность) объекта была выполнена, и поэтому мы обычно видим обратные вызовы, выходящие за пределы области его ответственности, и именно тогда мы сталкиваемся с проблемами.
Из этого потрясающего сообщения в блоге .
В этом случае лучше воздействовать на контроллер , где вы можете добавить свою функциональность напрямую или делегироватьна услугу для еще более чистого решения:
# shell
rails g devise:controllers users
# config/routes.rb
devise_for :users, controllers: { registrations: "users/registrations" }
# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
after_action :create_default_team, only: :create
private
def create_default_team
Team.create_default(@user) if @user.persisted?
end
end