为什么我的路线不匹配?

时间:2014-01-11 02:40:00

标签: ruby-on-rails routes railstutorial.org

我是Rails的新手。我试图在rails示例应用程序中启用命名路由的使用。当我执行以下操作并尝试在浏览器中访问该页面时,我会将操作控制器:异常捕获作为标题,并发送no route matches消息。

配置/ routes.rb中

SampleApp::Application.routes.draw do
# root to: 'static_pages#home' #matches '/'
  root to: 'static_pages#home'

  match '/help', to: 'static_pages#help', via: [:get, :post] (*)
  match '/about', to: 'static_pages#about', via: [:get, :post] (*)
  match '/contact', to: 'static_pages#contact', via: [:get, :post] (*)
  [...comments...]
end

我在控制器中有必要的操作。我也有视图,但没有一个是错误消息。确切的错误消息如下:

No route matches [GET] "/static_pages/home"

我也试过root 'static_pages#home'作为替代方案。依然没有。

(*)当我删除via: [:get, :post]时,浏览器会抛出一个RuntimeError,

  

如果没有,请不要在路由器中使用match方法   指定HTTP方法。如果要将操作公开给两者   GET和POST,添加via: [:get, :post]选项。如果你想暴露   您对GET的操作,在路由器中使用get:而不是:匹配   “控制器#动作”做:得到“控制器#动作”

3 个答案:

答案 0 :(得分:1)

  1. 请记住,在更改路由后,您必须重新启动服务器!

  2. 在我看来,当您的根路线定义127.0.0.1:3000/static_pages/home

  3. 时,您尝试在浏览器网址127.0.0.1:3000中打开

    PS我希望它能帮到你

答案 1 :(得分:1)

Root是您访问localhost:3000的路线,因此当您访问“localhost:3000”时,它与您的情况下的static_pages / home匹配。

如果您需要将'localhost:3000 / static_pages / home'转发到相应的控制器,您还需要另外定义路径。

get 'static_pages/home'

否则我认为在更改路线后不需要重新启动服务器,除非出现问题,但主要是它无法解决问题。

答案 2 :(得分:1)

我认为这篇文章会清除你所有的疑惑, 我之前有类似的问题。

实际上当你在浏览器中选择URL时,你错了 正试图访问

local:3000/static_pages/home

何时应该尝试访问`

local:3000/home

正如你所说的那样 教程,在适当的时候你会明白为什么“匹配”不是 接受但暂时你应该继续你的“路线” 格式。 一个重要的事情是你在问任何问题之前应该做一些研究,而且这个问题已经被包括我在内的其他几个人问过,没有必要发布一个重复的帖子。我希望你们都清楚一切。享受!!!

这是类似的问题。 https://stackoverflow.com/a/19047811/2545197