2011-11-28 95 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操作。所以現在這一切都變得更有意義,但是那個錯誤信息當然可以改進。 –