了解rails路由:在routes.rb中匹配vs root

我正在关注此链接的rails教程: http : //ruby.railstutorial.org/chapters/filling-in-the-layout#code : static_page_routes

在/config/routes.rb文件中,我有

SampleApp::Application.routes.draw do match '/contact', :to => 'pages#contact' match '/about', :to => 'pages#about' match '/help', :to => 'pages#help' root :to => 'pages#home' end 

当我运行网站时,它给了我一个错误:没有路由存在页面/主页。 我在论坛周围搜索,ppl建议把匹配’/ pages / home’=>’pages#home’

我做了:

 SampleApp::Application.routes.draw do match '/contact', :to => 'pages#contact' match '/about', :to => 'pages#about' match '/help', :to => 'pages#help' match '/pages/home' => 'pages#home' root :to => 'pages#home' end 

一切正常。 但现在,我的问题是,有什么区别

 1. match '/something', :to => 'pages#something' 2. match '/something' => 'pages#something' 3. root :to => 'pages#home' 

基本上,我刚刚提出的代码。 根本不应该取主要主页,我不会需要匹配页面/主页=>页面#home?

太混乱了

谢谢!

编辑1:我没有得到我想要的答案,所以我认为我的问题是错的。 我将其分为两部分:

  1. 有什么区别:

    匹配’/ pages / home’=>’pages #home’和root:to =>’pages #home’

有人说root将它带到你可以理解的根页面,但正如我上面解释的那样,如果我只有root::pages / home显示路由错误。 pages / home应该与根页面相同,对吗?

  1. 有什么区别:

    匹配’/ contact’,:to =>’pages #contact’和match’/ pages / home’=>’pages #home

语法上,第一行有:to =>而第二行没有。 是:需要吗? 它有什么作用?

谢谢

我所知道的

 match '/something', :to => 'pages#something' match '/something' => 'pages#something' 

是等价的。 在Rails中找到不止一种说法相同的方法并不罕见。 对于常用方法,速记符号比比皆是。 如果你关心,后者是我使用和更经常看到的。

就根路由而言,以下是正在发生的事情: root :to => 'pages#home' #home root :to => 'pages#home'正在将“/”映射到pages_controller.rb中的home方法,如您所知。 但是使用“pages#home”不会创建URL“pages / home”。 它所做的只是告诉rails遇到“/”时要执行什么。 这就是为什么你需要告诉rails遇到“pages / home”时要做什么。 路线定义是单向交易。

我可以说更多,但我会尽量简短地回答。 如果您需要更多说明,请与我们联系。 此外, 这个导轨指南是一个很好的资源。

 root :to => 'pages#home' 

url /将映射到pagescontroller home操作。

/something将是pagescontrollersomething动作的url映射

 root :to => "pages#home" 

是默认路由,即当您转到“yourdomain.com/”时,它会路由到页面控制器中的主页操作。