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

che*_*ell 6 ruby ruby-on-rails delayed-job ruby-on-rails-3

我是一个尝试使用delayed_job的NOOB.

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

发送电子邮件:

UserMailer.delay.welcome_email(user)
Run Code Online (Sandbox Code Playgroud)

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

User.update_attributes(:emailed =>  true)
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*tti 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)
Run Code Online (Sandbox Code Playgroud)