2010-09-02 17 views
12

क्या कुछ_फिल्टर के समान कुछ है जो अभी भी चलता है यदि कार्रवाई अपवाद उठाती है?after_filter

मैं बाहरी लॉगर का उपयोग कर रहा हूं (क्योंकि मैं हेरोकू पर हूं); प्रतिक्रिया शीर्षलेख फ़िल्टर किए गए हैं और after_filter में लॉग इन हैं। यदि कोई अपवाद उठाया जाता है, तो फ़िल्टर नहीं चलता है, और मेरे पास प्रतिक्रिया शीर्षलेख डेटा का लॉग नहीं है।

यदि मैं log_error या rescue_action_in_public में हुक करने का प्रयास करता हूं, तो प्रतिक्रिया शीर्षलेख पूर्ण नहीं होगा (क्योंकि वास्तविक रेंडर इनके बाद बुलाया जाता है)।

क्या कोई अन्य कार्य है जिसे मैं ओवरराइड कर सकता हूं जिसे समकक्ष समय के बाद एक_फिल्टर पर बुलाया जाएगा, लेकिन हमेशा अपवाद फेंक दिया गया है या नहीं?

धन्यवाद!

उत्तर

10

आप एक आस-पास का उपयोग कर सकते हैं और अपवादों को पकड़ सकते हैं। उदाहरण के लिए

# in a controller 
around_filter :catch_exceptions 

def catch_exceptions 
    yield 
rescue ActiveRecord::RecordNotFound 
    permission_denied_response # gives a stock error page 
end 

आप application.rb नियंत्रक वर्ग में या किसी व्यक्तिगत नियंत्रक वर्ग में आस-पास का फ़िल्टर जोड़ सकते हैं।

+0

जो अपवादों को पकड़ता है, लेकिन पूर्ण प्रतिक्रिया शीर्षलेख नहीं देता है, मुझे विश्वास है। जो भी आप बचाव में प्रस्तुत करते हैं वह शामिल नहीं है। । । नहीं? –

+0

यदि कोई अपवाद है तो कोई मूल प्रतिक्रिया या शीर्षलेख नहीं था ... मुझे यकीन नहीं है कि आपका क्यू क्या है। हो सकता है कि आप http://github.com/rails/exception_notification चाहते हैं जो आपको एक स्टैक ट्रेस के साथ ईमेल करता है, तर्क देता है और जब कोई अपवाद होता है। –