“Ruby on Rails-Tutorial”中的路由错误

时间:2012-04-03 10:19:17

标签: ruby-on-rails ruby routing

看起来这里有些人有这个问题,但我找不到另一个话题的任何解决方案。

我正在做Ruby on Rails-Tutorial的第3章,处理静态页面。当我想在本地主机上打开它时,它在浏览器中给我一个“路由错误”。

我的Ruby目前的版本是1.9.3。 我的Rails目前是3.2版本。

我试过了:

  • 重新启动服务器
  • 再次保存所有文件
  • 检查static_pages_controller.rb
  • 中的任何问题
  • 检查routes.rb中的任何问题
  • 检查static_oages_spec.rb
  • 中的任何问题

单个静态页面的HTML代码中也没有错误。而且我在本教程中找不到任何更多帮助,也没有在StackOverflow上的其他问题中找到帮助。


编辑:

这是来自浏览器的实际错误消息:

  

路由错误

     

没有路线匹配[GET]“/ static_pages / home”尝试运行   有关可用路线的更多信息,请参阅rake路线。

如果我转到http://localhost:3000/static_pages/home,转到我拥有的三个静态页面之一。

这是routes.rb:

SampleApp::Application.routes.draw do

get "static_pages/home"

get "static_pages/help"

get "static_pages/about"

end

另外,我也在终端尝试了“rake routes”。这是结果:

home_static_pages GET    /static_pages/home(.:format)  static_pages#home
 help_static_pages GET    /static_pages/help(.:format)  static_pages#help
about_static_pages GET    /static_pages/about(.:format) static_pages#about
      static_pages POST   /static_pages(.:format)       static_pages#create
  new_static_pages GET    /static_pages/new(.:format)   static_pages#new
 edit_static_pages GET    /static_pages/edit(.:format)  static_pages#edit
                   GET    /static_pages(.:format)       static_pages#show
                   PUT    /static_pages(.:format)       static_pages#update
                   DELETE /static_pages(.:format)       static_pages#destroy

这是服务器给我的错误消息:

Started GET "/static_pages/home.html" for 127.0.0.1 at 2012-04-03 13:23:54 +0200

ActionController::RoutingError (No route matches [GET] "/static_pages/home.html"):
  actionpack (3.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.3) lib/rails/rack/logger.rb:26:in `call_app'
  railties (3.2.3) lib/rails/rack/logger.rb:16:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.1) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.1) lib/rack/lock.rb:15:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/static.rb:62:in `call'
  railties (3.2.3) lib/rails/engine.rb:479:in `call'
  railties (3.2.3) lib/rails/application.rb:220:in `call'
  rack (1.4.1) lib/rack/content_length.rb:14:in `call'
  railties (3.2.3) lib/rails/rack/log_tailer.rb:14:in `call'
  rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'
  /Network/Servers/pluto.kayoom.lan/Users/benediktkrebs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
  /Network/Servers/pluto.kayoom.lan/Users/benediktkrebs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
  /Network/Servers/pluto.kayoom.lan/Users/benediktkrebs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

9 个答案:

答案 0 :(得分:3)

试试这个:

match "/static_pages/home" => "static_pages#home", :via => :get
match "/static_pages/help" => "static_pages#help", :via => :get
match "/static_pages/about" => "static_pages#about", :via => :get

添加到路由中,重新启动服务器并刷新浏览器。

答案 1 :(得分:3)

如果您正在使用Spork,则必须重新运行Spork,以便您的测试将考虑配置文件(如routes.rb)中预先加载Spork的更改,因此不会自动更新。

  1. 停止Spork(Ctrl + C)
  2. 再次运行Spork(捆绑exec spork)
  3. 来源:this is the source of this information “更改prefork加载中包含的文件(例如 routes.rb )后,您必须重新启动Spork服务器以加载新的Rails环境。 如果您认为应该通过测试失败,请使用Control-C退出Spork服务器并重新启动它

答案 2 :(得分:0)

您的routes.rb文件有问题,请使用RESTful样式:

resource :static_pages do 
  collection do 
    get :home
    get :help
    get :about
  end 
end

或非RESTful样式:

match "static_pages/home", :controller => "static_pages", :action => "home"
match "static_pages/help", :controller => "static_pages", :action => "help"
match "static_pages/about", :controller => "static_pages", :action => "about"

有关详细信息,请参阅官方指南:http://guides.rubyonrails.org/routing.html

答案 3 :(得分:0)

我在使用Rails教程时遇到了一些问题,它有助于查阅作者的GitHub回购:https://github.com/railstutorial

找到您正在处理的文件并逐行比较。或者只是剪切并粘贴整个文件,看它是否会运行,然后追踪你的错误。

答案 4 :(得分:0)

如果你检查配置中的routes.rb,你可能会发现/ home中缺少'e'。添加它,你是金色的。或绿色。或者其他:)

答案 5 :(得分:0)

检查你的http://地址,特别是你在localhost:3000 / path或localhost:3000 / path1 / path2等

答案 6 :(得分:0)

将映射格式从get更改为match后,您将不再需要static_pages,只需直接转到localhost:3000/pagename,例如localhost:3000/about

答案 7 :(得分:-1)

从Ruby 2到Ruby 3存在一些差异,但仍然不容易找到3的文档。应该只有一个教程:rails 2和3之间的实际差异。 通过在rails上下载Ruby提供的指南是“红宝石书”,但它已经不再好了。它应该至少包含第19章开头的建议。

答案 8 :(得分:-1)

配置/ routes.rb中

取消注释

root:to => '欢迎#索引'