2011-08-24 13 views
5

Soy un NOOB tratando de trabajar con el trabajo retrasado.actualizar tabla de usuario después de correo electrónico de trabajo retrasado exitoso enviado

Quiero actualizar un modelo de usuario después de que el correo se haya enviado exitosamente utilizando el trabajo demorado. correo electrónico

Enviar:

UserMailer.delay.welcome_email(user) 

si el correo enviado con éxito haga lo siguiente:

User.update_attributes(:emailed => true) 

¿Cómo puedo obtener una devolución de llamada o el gatillo cuando el correo electrónico se envía con éxito?

Respuesta

9

Necesita crear un objeto Job en lugar de llamar al ayudante #delay. Puede usar el gancho success para ejecutar la devolución de llamada.

class WelcomeEmailJob < Struct.new(:user_id) 
    def perform 
    UserMailer.welcome_email(user) 
    end 

    def success(job) 
    user.update_attribute(:emailed, true) 
    end 

    private 

    def user 
     @user ||= User.find(user_id) 
    end 
end 

Delayed::Job.enqueue WelcomeEmailJob.new(user.id) 
+0

Wow que se ve increíble. Voy a darle una oportunidad. Gracias Simone, eso es genial. – chell

Cuestiones relacionadas