2011-03-01 31 views
2

當設置根路徑,沒有任何令人信服的理由來選擇這句法:Rails的路由到根

map.root :controller => "login", :action => 'show' 

超過這樣的語法:

match "/" => "login#show" 

第二個語法將允許您使用第一個選項是:constraints選項。有沒有任何理由使用第一個選項?

+1

答案取決於你的Rails版本。 'providence'回答了Rails 3的工作... – 2011-03-01 03:33:58

+0

嗯,是的,它似乎確實是在混合導軌2和導軌3.'map。*'在rails 3中工作,但它不是首選方法 – SooDesuNe 2011-03-01 03:44:22

+0

爲什麼你會需要爲根路徑使用'constraints'? AFAIK,根路線就是這樣的:「/」......其他任何東西都應該與另一條定義的路線相匹配。 – 2011-03-01 04:17:26

回答

4

當您使用root :to時,ra​​ils 3會自動創建幫助程序方法root_url和root_path來引用您的應用程序根目錄。這些方法通常用於gems引用你的應用程序根目錄,我實際上並不確定這些指向的位置,或者如果你沒有指定任何東西(從未嘗試過),它們甚至可以工作。加上它是"rails way" of doing things,所以通常最好遵循,除非你有一個很好的理由。

2

我認爲根本途徑應設置如下:你的建議聽起來像他們可能以後會引起衝突的道路

root :to => "Something#index" 

的方法。

+0

中提到的域/子域擁有不同的根路由啊,第三種語法,這個允許你使用':constraints'。同樣的問題適用,任何理由通過'匹配'/'' – SooDesuNe 2011-03-01 03:43:33

+0

這樣做我是比較新的,所以不要把我的答案看作是絕對的,但我能想到的是,如果再有一次參考'/',你會被引導到登錄#show。此外,如果有人已經登錄,您不希望他們被引導到登錄頁面,真的。我將根路由設置爲一些更有用的頁面,然後在顯示有用頁面之前強制使用rails來檢查用戶是否已通過身份驗證。如果他們不是,那麼重定向到login#show。注意:我假設login#show是一個登錄頁面,而不是另一個剛剛命名爲login的頁面。 – providence 2011-03-01 04:13:48

0

我認爲下面兩個是一樣的:

root :to => 'login#show' 

match '/' => 'login#show', :as => :root 

就像其他的路徑,如果你想要一個root_path,那麼對於match '/',你必須自己指定。

所以我認爲他們只是做同樣的事情(如果路徑是/,路由到login#show),但第一個將有更多的語義含義。

1

在Rails 4,這裏有一個更快的代碼,你可以使用:

root 'login#new_session' 

您可以替換與顯示/指數/等new_session,只要確保在你的登錄控制器來定義它。