2012-08-09 46 views
5

我們有以下的路線設置:多根路徑和範圍成交在Rails的

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'之類的東西來區分它們作爲解決方法。 – 2012-08-09 12:26:05

回答

7

默認情況下使用根方法來定義頂層/路線。 因此,你正在定義相同的路線兩次,導致第二個定義覆蓋第一個!

這裏是根法的定義:

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

很顯然,它的用途:根作爲命名的路線。 如果你想使用root方法,只需重寫所需的參數。 例如

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) 

那麼,這是不是一個錯誤!