2011-08-24 48 views
5

我是嘗試使用delayed_job工作的NOOB。成功推遲發送作業電子郵件後更新用戶表

我想在使用延遲作業成功發送郵件後更新用戶模型。

發送電子郵件:

UserMailer.delay.welcome_email(user) 

如果郵寄成功地做到以下幾點:

User.update_attributes(:emailed => true) 

我怎樣才能得到一個回調或觸發時被成功發送的電子郵件?

回答

9

您需要創建一個Job對象,而不是調用#delay幫助器。您可以使用success鉤子執行回調。

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

哇,看起來很棒。我會試一試。感謝Simone,這是很棒的東西。 – chell