Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

260
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!