成功延迟作业电子邮件发送后更新用户表

时间:2011-08-24 09:51:08

标签: ruby-on-rails ruby ruby-on-rails-3 delayed-job

我是一名尝试使用delayed_job的NOOB。

我希望在使用延迟作业成功发送邮件后更新用户模型。

发送电子邮件:

UserMailer.delay.welcome_email(user)

如果邮件成功发送,请执行以下操作:

User.update_attributes(:emailed =>  true)

如何在成功发送电子邮件后获得回叫或触发器?

1 个答案:

答案 0 :(得分:10)

您需要创建一个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)