2012-03-08 26 views
6

मैं उत्पादन रेल अनुप्रयोग से "सभी को पकड़ें" या "डिफ़ॉल्ट" मार्ग को हटाने का प्रयास कर रहा हूं। मुझे इसके उपयोग के लॉग को इकट्ठा करते समय संचालन को बनाए रखने में दिलचस्पी है ताकि मैं इसे उचित हार्ड कोड वाले मार्गों से बदल सकूं।रेलों में डिफ़ॉल्ट मार्ग का उपयोग

तो, मेरे पास मेरे config/routes.rb फ़ाइल में निम्न डिफ़ॉल्ट रूट लाइन है।

match '/:controller(/:action(/:id))' 

मैं हर बार जब रूट मारा जाता है तो मैं लॉग कैसे बना सकता हूं या पुनर्प्राप्त कर सकता हूं। इस लॉग में आदर्श रूप से पैरामीटर के साथ इस मार्ग द्वारा वास्तव में केवल अनुरोधों को शामिल किया जाएगा और मार्ग को सामान्य रूप से सामान्य रूप से काम करने की आवश्यकता होगी।

match ':controller(/:action(/:id))(.:format)', :using_default_route => true 

फिर app/controllers/application_controller.rb

before_filter do 
    if params[:using_default_route] 
    logger.info("Default route for #{request.path.inspect}. params = #{params.inspect}") 
    end 
end 

उत्तर

7

एक तरह से आप यह कर सकते हैं बदलने के लिए डिफ़ॉल्ट मार्ग है विकल्प:

match '/:controller(/:action(/:id))', constraints: -> (req) { 
    Rails.logger.info("Default route used: #{req.path.inspect}") 
    true 
} 

नोट: लैम्ब्डा फिर सच हो जाता है ताकि मैच सफल हो।

+0

आप शानदार अच्छे महोदय हैं। –

+0

महान उत्तर, उस सुविधा को नहीं पता था, धन्यवाद और +1 – apneadiving

+0

बस एक अपडेट। हालांकि यह आने वाले मार्गों को लॉग इन करने के लिए काम करता है, यह डिफ़ॉल्ट मार्ग के लिए रूट पीढ़ी का मिलान नहीं करता है (जैसा कि use_default_route पास नहीं किया गया है)। मैंने इसे पहले के बाद दूसरा मैच जोड़कर तय किया है जो पीढ़ी को अनुमति देगा, और अगर इसका उपयोग किया जाता है तो इसका अस्तित्व उठाया जाएगा। हालांकि, मेरा डर इन दोनों लाइनों को हटा रहा है अंततः उन विचारों को विफल कर देगा। यह बहुत अच्छा होगा अगर लॉग पीढ़ी का कोई तरीका था जो डिफ़ॉल्ट मार्ग का भी उपयोग करता है। –

8

में निम्नलिखित समारोह डाल एक और संभावना रेल रूटर constraints का उपयोग करना होगा: