Непонятная ошибка маршрутизации - PullRequest
0 голосов
/ 28 ноября 2011

Я знаю, что это вопрос новичка, но я не видел объяснения, и я бы его хотел.

Что именно это означает, когда Rails выдает ошибку маршрутизации, подобную этой:

Routing Error

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

Что меня удивляет, так это то, что само сообщение показывает, что мой запрос направляется на действие show контроллера library_imports. Как это происходит, если URL-адрес запроса не соответствует ни одному из маршрутов?

Ради полноты, URL, который я нажимаю, приводит к этой ошибке:

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

который должен соответствовать действию "index", а не "show".

Соответствующая часть 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 Ответ

0 голосов
/ 28 ноября 2011

Сообщение об ошибке вводит в заблуждение из-за того, что оно не говорит, а не того, что оно говорит. На самом деле нет маршрута, который можно построить из :controller => :library_imports, :action => :show, :library_id => @library, потому что в этом хэше отсутствует обязательный параметр :id.

Это могло бы быть менее запутанным, если бы был какой-то намек, такой как (did you leave out a required parameter?).

Также полезно отметить, что эта ошибка генерируется (я полагаю) в помощнике url_for, а не в диспетчере. Таким образом, запрос на самом деле вообще не маршрутизируется.

...