2011-08-24 5 views
5

Jestem NOOB, który próbuje pracować z opcją delayed_job.zaktualizuj tabelę użytkowników po wysłaniu e-maila z zadaniem opóźnionego wysłania.

Chcę zaktualizować model użytkownika po pomyślnym wysłaniu wiadomości e-mail z opóźnionym zleceniem.

Wyślij email:

UserMailer.delay.welcome_email(user) 

jeśli mail wysłany pomyślnie wykonać następujące czynności:

User.update_attributes(:emailed => true) 

Jak mogę uzyskać telefonicznego lub spust, gdy e-mail wysyłany jest z powodzeniem?

Odpowiedz

9

Musisz utworzyć obiekt Job zamiast wywoływać pomocnika #delay. Możesz użyć haka success, aby wykonać wywołanie zwrotne.

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, który wygląda świetnie. Spróbuję. Dzięki Simone to świetne rzeczy. – chell

Powiązane problemy