2012-08-09 7 views
5

हम निम्नलिखित मार्गों सेटअप:रेल में एक से अधिक जड़ रास्तों और स्कोप के साथ काम

MyApp::Application.routes.draw do 
    scope "/:locale" do  
    ...other routes 
    root :to => 'home#index' 
    end 
    root :to => 'application#detect_language' 
end 

कौन सा हमें इस देता है:

root  /:locale(.:format) home#index 
root /     application#detect_language 

जो ठीक है।

हालांकि

, जब हम लोकेल हम मुसीबत से टकराने के साथ रूट तैयार हैं:

root_path उत्पन्न / जो सही है।

root_path(:locale => :en)/?locale=en उत्पन्न करता है जो अवांछनीय है - हम /en

चाहते तो, सवाल है, यह संभव है और ऐसा कैसे?

+2

पता नहीं है कि प्रश्न संभव है, लेकिन आप कामकाज के रूप में उन्हें अलग करने के लिए ': as =>: home_root' जैसे कुछ का उपयोग कर सकते हैं। –

उत्तर

7

रूट विधि का उपयोग शीर्ष स्तर/मार्ग को परिभाषित करने के लिए डिफ़ॉल्ट रूप से किया जाता है। तो, आप एक ही मार्ग को दो बार परिभाषित कर रहे हैं, जिससे दूसरी परिभाषा पहले ओवरराइड हो गई है!

def root(options = {}) 
    options = { :to => options } if options.is_a?(String) 
    match '/', { :as => :root, :via => :get }.merge(options) 
end 

ऐसा नहीं है कि इसे इस्तेमाल करता है स्पष्ट है:: जड़ नामित मार्ग के रूप में

यहाँ जड़ विधि की परिभाषा है। यदि आप रूट विधि का उपयोग करना चाहते हैं तो आवश्यक पैराम को ओवरराइड करें। ईजी।

scope "/:locale" do  
    ...other routes 
    root :to => 'home#index', :as => :root_with_locale 
end 
root :to => 'application#detect_language' 

और के रूप में इस फोन:

root_with_locale_path(:locale => :en) 

तो, यह नहीं एक बग है!