2012-06-12 15 views
6

Tôi gặp lạ ActionController::RoutingError: No route matches. Các tuyến đường có thể được tạo ra:Không có kết quả phù hợp với tuyến đường mặc dù có một tuyến đường đi rake

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

Và nó đang ở trong 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 
(...) 

Nhưng tôi nó không được công nhận:

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

My routes.rb:

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

Bất kỳ ý tưởng?

Trả lời

8

Bạn có ItemsController lớp được xác định không? Nếu không có nó, tuyến đường của bạn sẽ không được công nhận. Có lẽ bạn đã viết sai chính tả nó.

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"}