Refresh user table after successful delayed email sending

I am a NOOB trying to work with delayed_job.

I want to update the user model after successfully sending mail using a delayed job.

To send a letter:

UserMailer.delay.welcome_email(user)

If the message was sent successfully, follow these steps:

User.update_attributes(:emailed =>  true)

How can I get a callback or trigger when an email is sent successfully?

+5
source share
1 answer

You need to create a Job object instead of calling an assistant #delay. You can use hook successto make a callback.

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)
+9
source

All Articles