Usando una devolución de llamada es perfectamente legítimo si está tratando con el estado interno del modelo que ha creado.
Después de crear un User
, que necesita para crear un defecto Team
. Es preferible que evite utilizar devoluciones de llamada para tratar con otros objetos.
"after_ *" las devoluciones de llamada se utilizan principalmente en relación con el guardado o la persistencia del objeto. Una vez que se ha guardado el objeto, se ha cumplido el propósito (es decir, la responsabilidad) del objeto y, por lo tanto, lo que generalmente vemos son devoluciones de llamada que se extienden fuera de su área de responsabilidad, y es entonces cuando nos encontramos con problemas.
From this awesome blog post.
En este caso es mejor acto en el controlador, donde se puede añadir su funcionalidad directamente o delegate to a service para una solución aún mejor:
# 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
¿Cómo puedo utilizar esto para acceder al usuario? Por ejemplo, quiero asignarle a un usuario un rol predeterminado usando Royce, por lo que solo es '@ usuario', entonces puedo hacer '@user.add_role: usuario' – Un3qual
@ Un3qual' self' –
¡Gracias! Me siento realmente estúpido ahora. – Un3qual