2011-02-18 9 views
8

मेरे पास एक रेल 3 ऐप है जो उपयोगकर्ता डेटा को हिट करते समय कुछ डेटा (क्लास विधि के साथ) लाने में देरी_job का उपयोग करता है। मैं क्लास विधि चलाने वाले AJAX प्रक्रिया को कैसे इंगित कर सकता हूं (ताकि मैं मतदान रोक सकता हूं)?एक अजाक्स प्रक्रिया को इंगित करें कि देरी हुई नौकरी

संपादित करें:

स्पष्ट करने के लिए, मुझे पता है कि जब delayed_job समाप्त हो गया है चाहता हूँ, नहीं जब ajax प्रक्रिया सफल रहा है। फिर मैं चल रही AJAX प्रक्रिया में देरी_job पूर्ण स्थिति को पारित करना चाहता हूं।

उत्तर

11

आमतौर पर, ऐसा करने का सबसे अच्छा तरीका आपके डेटाबेस में, नौकरी की प्रगति का संकेत है। उदाहरण के लिए:

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 

तो है कि जब आप काम enqueue:

User.update_attributes :calculation_status => 'enqueued' 
User.send_later :perform_calculation 

आप अपने नियंत्रक में, क्वेरी कर सकता है, कार्य की स्थिति:

def check_status 
    @user = User.find(params[:id]) 
    render :json => @user.calculation_status 
end 

आप मतदान ajax प्रक्रिया तो यह जांचने के लिए चेक_स्टैटस को कॉल कर सकते हैं कि यह कैसे काम कर रहा है, अगर यह सफल हुआ है या यह विफल हो गया है।

+0

पैन आदमी है! धन्यवाद दोस्त, यह एक आकर्षण की तरह काम किया। अच्छा विचार। –

-2

यदि आप प्रोटोटाइपजेस जैसे किसी भी जावास्क्रिप्ट ढांचे का उपयोग कर रहे हैं, तो वैकल्पिक विकल्प हैश में, आप आमतौर पर एक पूर्ण और/या असफल कॉलबैक प्रदान करते हैं। API Reference

+1

लेकिन क्या कॉल सफल नहीं होगा क्योंकि नौकरी सिर्फ इसलिए बढ़ रही है? – lightyrs

0
इस मणि आप प्रगति Delayed::Job वस्तु पर ही सीधे ट्रैकिंग हो सकता है के साथ

:, https://github.com/GBH/delayed_job_progress

पूरे नौकरियों नहीं रह गया है आप निकाल दिया जाता है ताकि आप एक नौकरी के खिलाफ मतदान कर सकते हैं जब तक यह completed राज्य के साथ वापस आता है।

संबंधित मुद्दे