2011-03-01 53 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,只要确保在你的登录控制器来定义它。