2012-09-03 24 views
19

सरल प्रश्न सहेजने के बाद अपवाद में अपवाद। मेरे पास एक ActiveRecord मॉडल है जिसे मैं रिकॉर्ड सहेजने के बाद पोस्ट प्रोसेसिंग करना चाहता हूं। तो मॉडल में मेरे पास एक queue_for_processing विधि है जो मेरे Resque queue पर नौकरी चिपक जाती है। मेरे रिकॉर्ड को सफलतापूर्वक जारी रखने के बाद इसे निष्पादित करने के लिए मैंने अपने मॉडल में निम्नलिखित लिखा है:रेल:

after_create :queue_for_processing 

बहुत आसान। मैंने सोचा था कि सब कुछ उम्मीद के अनुसार काम कर रहा था कि पिछली रात मेरा रेडिस सर्वर नीचे चला गया और चीजें बहुत खराब हो गईं। मेरी उम्मीद थी कि रिकॉर्ड अभी भी बचाया जाएगा और मैं बाद में नौकरी को संसाधित कर सकता हूं। लेकिन queue_for_processing विधि अपवाद (अपेक्षित व्यवहार) फेंक रही है और रिकॉर्ड को सहेजने से रोक रही है।

क्या मैं गलत समझता हूं कि बाद में काम कैसे करता है? या मेरी समझ सही है और कुछ मज़ाकिया हो रहा है?

धन्यवाद।

उत्तर

34

हां, कॉलबैक सभी लेनदेन में लिपटे हैं। या after_save में

  • वापसी before_save से झूठी या इसी तरह कॉलबैक
  • अपवाद before_save में या इसी तरह कॉलबैक
  • अपवाद समान कॉलबैक (after_create)
:

असल में, निम्नलिखित एक रोलबैक का कारण होगा

निम्नलिखित रोलबैक नहीं करते हैं:

  • वापसी after_save या इसी तरह कॉलबैक से झूठी
  • अपवाद में after_commit

आप एक रोलबैक पैदा करने के लिए एक अपवाद नहीं करना चाहते हैं, का उपयोग after_commit

+1

बहुत बढ़िया, त्वरित प्रतिक्रिया के लिए धन्यवाद। यह भी सहायक था: http://rails-bestpractices.com/posts/695-use-after_commit –

+0

इसके अलावा, मुझे बाद में आने के लिए धन्यवाद। मुझे लगता है कि इसे रेल 3 में पेश किया गया था, लेकिन मुझे ज्ञापन याद करना होगा। मुझे नई चीजें सीखना पसंद है :-) –

+0

ग्रेट स्पष्टीकरण! संक्षेप के लिए +1। –