Rails ActiveJob Starting with a Controller
I have my own code that calls some backend systems and updates the database remotely. I have an ActiveJob that does a task:
## Runs join code
class DataJoin < ApplicationJob
queue_as :default
def perform
join = Joiner.new
join.run
NotifMailer.sample_email.deliver_now
end
end
I want to start an ActiveJob manually from a controller / view:
class AdminController < ApplicationController
before_action :verify_is_admin
private def verify_is_admin
(current_user.nil?) ? redirect_to(root_path) : (redirect_to(root_path) unless current_user.admin?)
end
def index
@username = current_user.name
@intro = "Welcome to the admin console"
end
def join
## Code to start ActiveJob DataJoin??
end
end
How can I launch an ActiveJob from a controller?
+3
source to share
2 answers
Try the following:
DataJoin.perform_later
perform_later
specifies the job in the specified queue. If perform
your active job method accepts some arguments, you can even pass them in perform_later
and they will be available at runtime.
DataJoin.perform_later(1, 2, 3)
# DataJoin
def perform(a1, a2, a3)
# a1 will be 1
# a2 will be 2
# a3 will be 3
end
+2
source to share