2011-08-24 3 views
5

私はdelayed_jobで作業しようとしているNOOBです。遅延ジョブのメールが正常に送信された後にユーザーテーブルを更新します

遅延ジョブを使用してメールが正常に送信された後、ユーザーモデルを更新したいと考えています。

メールを送信:

UserMailer.delay.welcome_email(user) 

正常に送信されたメールは、次の手順を実行している場合:

User.update_attributes(:emailed => true) 

はどのようにして、電子メールが正常に送信されたコールバックまたはトリガを得ることができますか?

答えて

9

#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

関連する問題