2012-06-12 52 views
6

我很奇怪ActionController::RoutingError: No route matches。可以生成路线:尽管在耙路中有一条路线没有路线匹配

> r = Rails.application.routes 
> r.generate controller: :items, action: :index, user_id:1 
    => ["https://stackoverflow.com/users/1/items", {}] 

而且这是在rake routes

$ rake routes 
    user_items GET /users/:user_id/items(.:format)   items#index 
       POST /users/:user_id/items(.:format)   items#create 
    new_user_item GET /users/:user_id/items/new(.:format)  items#new 
edit_user_item GET /users/:user_id/items/:id/edit(.:format) items#edit 
     user_item GET /users/:user_id/items/:id(.:format)  items#show 
       PUT /users/:user_id/items/:id(.:format)  items#update 
       DELETE /users/:user_id/items/:id(.:format)  items#destroy 
(...) 

但我这不是承认:

r.recognize_path "https://stackoverflow.com/users/1/items" 
ActionController::RoutingError: No route matches "https://stackoverflow.com/users/1/items" 

routes.rb

Sumo2::Application.routes.draw do 
    resources :users do 
    resources :items 
    end 
    (...) 
end 

有任何想法吗?

回答

8

您是否定义了ItemsController类?没有它,你的路线就不会被识别。也许你拼错了。

irb(main):001:0> r = Rails.application.routes 
=> #<ActionDispatch::Routing::RouteSet:0x1cbba00> 
irb(main):002:0> r.recognize_path "https://stackoverflow.com/users/1/items" 
ActionController::RoutingError: No route matches "https://stackoverflow.com/users/1/items" 
     ... errors ... 
irb(main):003:0> class ItemsController; end # <----------< 
=> nil 
irb(main):004:0> r.recognize_path "https://stackoverflow.com/users/1/items" 
=> {:action=>"index", :controller=>"items", :user_id=>"1"}