2011-08-24 11 views
5

Sono un NOOB che prova a lavorare con delayed_job.aggiorna la tabella utente dopo aver inviato correttamente l'e-mail di lavoro in ritardo inviata

Desidero aggiornare un modello utente dopo che la posta è stata inviata correttamente utilizzando il lavoro ritardato.

Invia e-mail:

UserMailer.delay.welcome_email(user) 

se mail correttamente inviata effettuare le seguenti operazioni:

User.update_attributes(:emailed => true) 

Come posso ottenere un callback o grilletto quando l'e-mail viene inviata con successo?

risposta

9

È necessario creare un oggetto Job anziché chiamare l'helper #delay. È possibile utilizzare il gancio success per eseguire la richiamata.

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, è fantastico. Farò un tentativo. Grazie Simone, è grandioso. – chell

Problemi correlati