Shimol Khan
Shimol Khan

Reputation: 83

How can I send email after 3 minutes in Rails using Sidekiq?

I have a simple rails app. When a user(current_user) create a property, I want that an email will be sent to admin. Mailing is working fine, but i don't have idea how to send the email after delaying 3 minutes. Using sidekiq is must here.

Mailer:

 class PropertyMailer < ActionMailer::Base
   def property_created(user)
     mail(
       to: "[email protected]",
       from: user.email,
       subject: "Property submitted",
       body: "A property has been submitted. Please review it."
      )
   end
 end

PropertiesController:

def create
 @property = current_user.properties.build(property_params)

 respond_to do |format|
  if @property.save
    
    SendEmailToAdminJob.perform_later
    
    format.html { redirect_to @property, notice: "Property was successfully saved." }
    format.json { render :show, status: :created, location: @property }
  else
    format.html { render :new, status: :unprocessable_entity }
    format.json { render json: @property.errors, status: :unprocessable_entity }
  end
end

end

SendEmailToAdmin Job:

 class SendEmailToAdminJob < ApplicationJob
   queue_as :default

   def perform(*args)

   end
 end

Thanks in advance

Upvotes: 1

Views: 554

Answers (1)

Schwern
Schwern

Reputation: 164629

You can set a wait time.

SendEmailToAdminJob.set(wait: 3.minutes).perform_later

See https://guides.rubyonrails.org/active_job_basics.html#enqueue-the-job and https://api.rubyonrails.org/classes/ActiveJob/Core/ClassMethods.html#method-i-set

Upvotes: 1

Related Questions