我正在关注此链接中的 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'
基本上,我刚刚放的代码。根不应该占用主主页,我不需要匹配 pages/home => pages#home 吗?
好纠结
谢谢!
EDIT1:我没有得到我想要的答案,所以我认为我的问题是错误的。我将把它分成两部分:
匹配 '/pages/home' => 'pages#home'
和
root :to => 'pages#home'
有人说 root 将它带到你的根页面,我可以理解,但正如我上面解释的,如果我只有 root:页面/主页显示路由错误。 pages/home 应该和根页面一样,对吗?
匹配 '/contact', :to => 'pages#contact'
和
匹配 '/pages/home' => 'pages#home
在语法上,第一行有 :to => 而第二行没有。 to: 需要吗?它有什么作用?
谢谢
最佳答案
我所知道的
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是一个很好的资源。
关于ruby-on-rails - 了解 Rails 路线 : match vs root in routes. rb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733101/