2016-05-03 14 views
9

रेल 5.0.0.beta4 गतिशील युक्त मार्गों पर एक प्रतिवाद चेतावनी शुरू की: कार्रवाई और: नियंत्रक खंडों:रेल 5.1 मार्गों: गतिशील: कार्रवाई पैरामीटर

DEPRECATION WARNING: Using a dynamic :action segment in a route is deprecated and will be removed in Rails 5.1. 

The commit message from this PR कहता है:

की अनुमति दे: नियंत्रक और: कॉन्फ़िगर/path.rb में पथ के माध्यम से क्रिया मान निर्दिष्ट किए जाने के लिए रेलवे में कई समस्याओं का अंतर्निहित कारण रहा है जिसके परिणामस्वरूप सुरक्षा रिलीज़ हुई हैं। इस के प्रकाश में यह बेहतर है कि नियंत्रकों और कार्यों को 'खराब' मानों को ब्लैकलिस्ट या sanitize करने की बजाय स्पष्ट रूप से श्वेतसूचीबद्ध किया गया है।

आप कार्रवाई पैरामीटर के एक सेट "श्वेतसूची" के बारे में कैसे जाएंगे? मैं अपने मार्गों फ़ाइल में निम्न है, जो प्रतिवाद चेतावनी को ऊपर उठाने रहे हैं:

namespace :integrations do 
    namespace 'stripe' do 
    %w(auth webhook activate).each do |action| 
     get action, action: action 
    end 
    end 
    post 'stripe/deactivate', controller: 'stripe', action: 'deactivate' 
end 
+0

स्पष्ट जवाब स्पष्ट रूप से प्रत्येक कार्य को परिभाषित करने के प्रतीत हो रहा है, लेकिन यह एक में बोझिल लगता है कई कस्टम कार्यों के साथ नियंत्रक। शायद यह सबसे अच्छा अभ्यास है, n'est-ce pas? – mysmallidea

उत्तर

15

हालांकि यह थोड़ा बोझिल है, सबसे अच्छा तरीका स्पष्ट रूप से परिभाषित करने के लिए मार्गों हो रहा है

 
get 'stripe(/:action)', controller: 'stripe', action: :action, as: "stripe" 
+0

बस एक मामूली टिप्पणी। 'कार्रवाई करें, कार्रवाई: कार्रवाई' में आप कार्रवाई छोड़ सकते हैं, क्योंकि रेल एक ही नाम के साथ कार्रवाई के लिए डिफ़ॉल्ट रूप से चूक जाता है। इस प्रकार 'कार्रवाई प्राप्त करें' पर्याप्त है। –

0

यह काम करता है:

namespace :integrations do 
    get 'stripe(/:action)', controller: 'stripe', as: "stripe" 
    post 'stripe/deactivate', controller: 'stripe', action: 'deactivate' 
end 
+1

यह वही है जो बहिष्कृत किया गया है। –

+0

@JamesMoore बहिष्कृत –

+0

@ फ्रैंकफ़ैंग https://github.com/rails/rails/issues/27231#issuecomment-304650177 –

3

आप के रूप में ही मामला नहीं है, लेकिन मैं ऐसा किया:

इस तरह 210

मार्गों:

get ':path', to: 'pages#index' 

मैं अगर मैं चाहता हूँ एक नेस्टेड पथ मैं * का उपयोग करेगा लगता है:

get '*path', to: 'pages#index' 
+0

हाँ के बारे में कोई दस्तावेज है, मैंने इस तरह के समाधान को बहुत ही चुना है। क्या ऐसा करने के साथ कोई सुरक्षा चिंता है? एक अजीब साइड इफेक्ट यह है कि अब आप आंशिक के लिए पेज पर जा सकते हैं। जैसे यदि आपके पास 'विचार/पृष्ठ/_sidebar.html.erb' है, तो आप अब '/ _sidebar' – Obversity

+0

पर जा सकते हैं यह दृष्टिकोण असुरक्षित हो सकता है - http://brakemanscanner.org/docs/warning_types/dynamic_render_paths/ –

+0

@BradWerth मुझे पता है इस तरह का कोड असुरक्षित हो सकता है, लेकिन इस मामले में आलेख एक उदाहरण नहीं देता है, 'पैराम्स [: पथ]' एक स्ट्रिंग है, यह केवल फाइल मिलान पथ – juanpastas

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