2011-11-28 156 views
0

我知道这是一个新手问题,但我没有看到解释,我想要一个。混淆路由错误

究竟是什么意思时,Rails的发出路由错误是这样的:

Routing Error 

No route matches {:action=>"show", :controller=>"library_imports", :library_id=>#<Library id: 1, ... 

令我百思不解的是,消息本身就说明了我的请求被路由到library_imports控制器的show作用。如果请求URL与任何路由不匹配,情况如何?

为了完整起见,网址我打的结果此错误是:

http://localhost:3000/libraries/2/library_imports 

应该地图的“指数”行动,而不是“作秀”。

config/routes.rb相关部分是:

Import::Application.routes.draw do 

    resources :libraries do 
    resources :library_imports 
    end 

而且rake routes输出的相关部分是:

library_library_imports GET /libraries/:library_id/library_imports(.:format)   {:action=>"index", :controller=>"library_imports"} 
          POST /libraries/:library_id/library_imports(.:format)   {:action=>"create", :controller=>"library_imports"} 
new_library_library_import GET /libraries/:library_id/library_imports/new(.:format)  {:action=>"new", :controller=>"library_imports"} 
edit_library_library_import GET /libraries/:library_id/library_imports/:id/edit(.:format) {:action=>"edit", :controller=>"library_imports"} 
    library_library_import GET /libraries/:library_id/library_imports/:id(.:format)  {:action=>"show", :controller=>"library_imports"} 
          PUT /libraries/:library_id/library_imports/:id(.:format)  {:action=>"update", :controller=>"library_imports"} 
          DELETE /libraries/:library_id/library_imports/:id(.:format)  {:action=>"destroy", :controller=>"library_imports"} 
+1

你可以把你试图命中的实际路线和routes.rb文件的相关位?过去我曾经看到,当我尝试使用破碎的路线时,节目似乎是成员路线的默认路线。有时候我得到的一件事是错误地使用GET/POST/PUT ...意味着它是一个GET,我错误地尝试使用POST。 – jaydel

+0

我会给我的问题添加一些细节,但我所寻找的答案比这个特定的实例更一般:即一般Rails如何从URL中确定一个动作和一个控制器,同时说它不能路由请求? –

+0

我经常在这些案例中看到show action为默认路由,但我不知道为什么会在某些情况下发生,而不是在其他情况下发生。对不起,我不能对此更有帮助... – jaydel

回答

0

错误消息误导性的东西不说,而不是什么它说。确实没有可以从:controller => :library_imports, :action => :show, :library_id => @library构建的路由,因为该散列省略了所需的:id参数。

如果有一些提示,如(did you leave out a required parameter?),可能会不那么困惑。

注意到这个错误在url_for助手中生成(我相信),而不是在调度程序中。所以请求实际上并没有被路由。

+0

感谢您的答复zetetic。我花了几天的时间思考它,但我想现在对我来说是有道理的。有了这样的理解,信息就会更有帮助,现在你的答案对我来说也是有意义的。 –

+0

根据使用的请求方法,命名的路径library_library_import_path可以路由到:show或:delete。我用它来构建一个“删除”链接。很明显,Rails假定它将参与一个:show操作。所以现在这一切都变得更有意义,但是那个错误信息当然可以改进。 –