I have a Rails 3 app that uses delayed_job to fetch some data (with a class method) when the user hits the page. How can I indicate to the ajax process that the class method has run (so that I can stop polling)?
EDIT:
To clarify, I want to know when the delayed_job has run, not when the ajax process has succeeded. Then I want to pass the delayed_job completed status to the running ajax process.
Typically, the best way to do this is to store, in your database, an indication of the job's progress. For instance:
class User
def perform_calculation
begin
self.update_attributes :calculation_status => 'started'
do_something_complex
self.update_attributes :calculation_status => 'success'
rescue Exception => e
self.update_attributes :calculation_status => 'error'
end
end
end
So that when you enqueue the job:
User.update_attributes :calculation_status => 'enqueued'
User.send_later :perform_calculation
You can query, in your controller, the status of the job:
def check_status
@user = User.find(params[:id])
render :json => @user.calculation_status
end
You polling ajax process can then simply call check_status to see how the job is progressing, if it has succeeded or if it has failed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With