Reputation: 83
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
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