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

时间:2011-04-20 15:48:27

标签: 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

当我运行网站时,它给了我一个错误:没有路由存在页面/主页。我搜索论坛和ppl建议把匹配'/ 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 =>网页#回家?

如此令人困惑,

谢谢!

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

  1. 有什么区别:

    匹配'/ pages / home'=> “网页#家” 和 root:to => '网页#家'

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

    1. 有什么区别:

      匹配'/ contact',:to => “网页#接触” 和 匹配'/ pages / home'=> “网页#回家

    2. 语法上,第一行有:to =>而第二行则没有。是:需要吗?它做了什么?

      感谢

3 个答案:

答案 0 :(得分:14)

据我所知

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

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

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

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

答案 1 :(得分:1)

root :to => 'pages#home'

网址/将映射到pagescontroller home操作。

/something将成为pagescontroller something行动的网址映射

答案 2 :(得分:0)

root :to => "pages#home"

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