Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

253
Vistas
Rieles: llame al mismo método en after_commit para crear, actualizar, eliminar pero haga cosas separadas en función de ciertas banderas

Quiero crear y eliminar el usuario en un servicio de terceros en función de los siguientes escenarios

  1. crear usuario en un tercero

    • cuando se crea el usuario en la aplicación
    • marcado como active desde inactive (tengo una columna en mi modelo de Usuario llamada is_active )
  2. eliminar usuario en un tercero

    • cuando el usuario es eliminado de la aplicación
    • marcado como inactive

parece que puedo hacer uso de la devolución de llamada after_commit , pero ¿cómo identifico en after_commit que la acción es create , update o delete ?

Cualquier ayuda en esto será útil.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No utilice devoluciones de llamada para esto, se arrepentirá.
El principal problema con las devoluciones de llamada son:

  • Sin contexto: en realidad no tienes idea de lo que está pasando en la aplicación.
  • Es difícil controlar cuándo se activa realmente la devolución de llamada, y lo que es más importante, cuándo no desea que se active (como, por ejemplo, al cargar dispositivos).
  • Pone demasiada responsabilidad en el modelo.
  • No puede probar la lógica de devolución de llamada sin crear/actualizar/destruir el registro.

Realmente no puedo subestimar esto cuando parece que también estás tratando con una API de terceros. Usar un mecanismo implícito como devoluciones de llamada cuando estás tocando el límite de la aplicación es una muy mala idea. La idea de canalizar todo a través de un solo método tampoco es buena.

En su lugar, puede usar patrones como objetos de servicio para manejar las "transformaciones" del modelo.

 class UserCreationService def initialize(user) @user = user end def perform # do something with @user end end class UserInactivationService def initialize(user) @user = user end def perform # do something with @user end end

Estos hacen un solo trabajo y son fáciles de probar y solo se activarán cuando usted lo desee explícitamente. ActiveJob es en realidad un ejemplo de este patrón.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda