0

ネストされたリソースで浅いルートを定期的に使用しているため、単純なものを見落としていると思いましたが、なぜルーティングエラーが発生するのかわかりません。students#show

Courses と Students という 2 つのネストされたリソースを持つ School があります。すべてのアクションはコースで機能します。:index、:new、および :create アクションは、生徒に対して機能します。

に示され/students/3ているようにルーティングされるのではなく、ルーティング エラーが発生するのはなぜですか?students#showrake routes

の例外/students/3:

Routing Error
No route matches {:controller=>"students"}

Try running rake routes for more information on available routes.

関連するビットは次のとおりです...

rake ルートの出力:

...
            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
...

コントローラーとビュー

調べてみましたが、これはルーティング例外なので、このコードには達していないと思います。違うと言ってくれれば、追加できます。

ライブラリ

authlogicでcancanを使用していますが、これらからルーティング エラーが発生したことはありません。

4

1 に答える 1

0

はい、それは簡単なことでした。ルーティングエラーはコントローラーとビューに到達していないことを意味するという誤った仮定をしました....そして、この「天才」はログに完全なスタックトレースがあることを忘れていました:

Completed 500 Internal Server Error in 89ms

ActionController::RoutingError (No route matches {:controller=>"students"}):
  app/views/shared/_breadcrumbs.html.erb:27:in `_app_views_shared__breadcrumbs_html_erb___658518109680707361_70357170598800'
  app/views/layouts/application.html.erb:45:in `_app_views_layouts_application_html_erb__2976677320852012228_70357170792580'
  app/controllers/students_controller.rb:19:in `show'

students#indexパンくずリストが、存在しないリンクを作成しようとしていました。ブレッドクラムはこのケース (25 行目) を処理しようとしますが、ネストされたリソースのチェックは失敗します。

25: <% elsif controller.class.action_methods.include?('index') %>
26:   <li>
27:     <%= link_to controller_name.titleize, :controller => controller_name, :action => 'index' %>
28:     <span class="divider">/</span>
29:   </li>
于 2012-12-04T14:47:52.957 に答える