Я регулярно использую неглубокие маршруты на вложенные ресурсы, поэтому подумал, что пропустил что-то простое, но не понимаю, почему Я получаю сообщение об ошибке маршрутизации для students#show
.
У меня есть школа с двумя вложенными ресурсами: курсы и студенты. Все действия работают на курсах. Действия :index, :new и :create работают для студентов.
Почему я получаю сообщение об ошибке маршрутизации для /students/3
вместо маршрутизации на students#show
, как указано в rake routes
?
исключение на /students/3
:
Routing Error
No route matches {:controller=>"students"}
Try running rake routes for more information on available routes.
Вот соответствующие биты ...
вывод рейк-маршрутов:
...
school_students GET /schools/:school_id/students(.:format) students#index
POST /schools/:school_id/students(.:format) students#create
new_school_student GET /schools/:school_id/students/new(.:format) students#new
edit_student GET /students/:id/edit(.:format) students#edit
student GET /students/:id(.:format) students#show
PUT /students/:id(.:format) students#update
DELETE /students/:id(.:format) students#destroy
approve_course GET /courses/:id/approve(.:format) courses#approve
publish_course GET /courses/:id/publish(.:format) courses#publish
school_courses GET /schools/:school_id/courses(.:format) courses#index
POST /schools/:school_id/courses(.:format) courses#create
new_school_course GET /schools/:school_id/courses/new(.:format) courses#new
edit_course GET /courses/:id/edit(.:format) courses#edit
course GET /courses/:id(.:format) courses#show
PUT /courses/:id(.:format) courses#update
DELETE /courses/:id(.:format) courses#destroy
schools GET /schools(.:format) schools#index
POST /schools(.:format) schools#create
new_school GET /schools/new(.:format) schools#new
edit_school GET /schools/:id/edit(.:format) schools#edit
school GET /schools/:id(.:format) schools#show
PUT /schools/:id(.:format) schools#update
DELETE /schools/:id(.:format) schools#destroy
...
маршруты.rb
Lms::Application.routes.draw do
...
resources :schools, :shallow => true do
resources :students
resources :courses do # Courses still work if I remove this block.
member do
get 'approve'
get 'publish'
end
end
end
...
контроллеры и представления
Я проверил, но, поскольку это исключение маршрутизации, я не думаю, что этот код достигнут. Если вы скажете мне иначе, я могу добавить их.
библиотеки
Я использую cancan с authlogic, но никогда не сталкивался с ошибкой маршрутизации из-за них.
get
(например,get 'approve'
) для путей изменения состояния. Это CSRF-дыра! Лучше подумай оpost
/put
. - person jdoe   schedule 04.12.2012:id=>3
, вызывает подозрение, а также объясняет ошибку (у вас нет маршрута для/students
), но не причину. Возможный конфликт маршрутов? У вас есть что-нибудь еще для студенческого контроллера? - person Mike Campbell   schedule 04.12.2012#index
. - person Anson   schedule 04.12.2012