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

oky*_*eni 13 ruby-on-rails ruby-on-rails-3

我正在通过以下链接关注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
Run Code Online (Sandbox Code Playgroud)

当我运行该网站时,它给了我一个错误:没有路由存在页面/主页.我在论坛周围搜索,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
Run Code Online (Sandbox Code Playgroud)

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

1. match '/something', :to => 'pages#something'
2. match '/something' => 'pages#something'
3. root :to => 'pages#home'
Run Code Online (Sandbox Code Playgroud)

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

太混乱了

谢谢!

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

  1. 有什么区别:

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

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

  1. 有什么区别:

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

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

谢谢

bre*_*ish 14

我所知道的

match '/something', :to => 'pages#something'
match '/something' => 'pages#something'
Run Code Online (Sandbox Code Playgroud)

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

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

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