Rails 3.2.11では、次のルート定義があります
resources :foos do
resources :bars
resources :bangs, :controller => 'foos/bangs'
end
その結果、次のルートになります
foo_bars GET /foos/:foo_id/bars(.:format) bars#index
POST /foos/:foo_id/bars(.:format) bars#create
new_foo_bar GET /foos/:foo_id/bars/new(.:format) bars#new
edit_foo_bar GET /foos/:foo_id/bars/:id/edit(.:format) bars#edit
foo_bar GET /foos/:foo_id/bars/:id(.:format) bars#show
PUT /foos/:foo_id/bars/:id(.:format) bars#update
DELETE /foos/:foo_id/bars/:id(.:format) bars#destroy
foo_bangs GET /foos/:foo_id/bangs(.:format) foos/bangs#index
POST /foos/:foo_id/bangs(.:format) foos/bangs#create
new_foo_bang GET /foos/:foo_id/bangs/new(.:format) foos/bangs#new
edit_foo_bang GET /foos/:foo_id/bangs/:id/edit(.:format) foos/bangs#edit
foo_bang GET /foos/:foo_id/bangs/:id(.:format) foos/bangs#show
PUT /foos/:foo_id/bangs/:id(.:format) foos/bangs#update
DELETE /foos/:foo_id/bangs/:id(.:format) foos/bangs#destroy
foos GET /foos(.:format) foos#index
POST /foos(.:format) foos#create
new_foo GET /foos/new(.:format) foos#new
edit_foo GET /foos/:id/edit(.:format) foos#edit
foo GET /foos/:id(.:format) foos#show
PUT /foos/:id(.:format) foos#update
DELETE /foos/:id(.:format) foos#destroy
パスはすべて正しいですが、コントローラーのルーティングは。に対してのみ正しいですresources :bangs
。コントローラではなくコントローラresources :bars
にルーティングする必要があります。foos/bars
bars
foos/
以前は、ネストされたリソースを処理するために名前空間付きコントローラーを設定できました。
#app/controllers/foos/bars_controller.rb
class Foos::BarsController < ApplicationController
#/foos/:foo_id/bar/:id available here
end
しかし、これはもはや当てはまらないようです。この動作はいつ変更され、Rails 3.2.11で同じ機能を取得するにはどうすればよいですか?
編集:resources :bangs
正しいコントローラーマッピングで結果を認識しましたが、暗黙的にそれを実行できるようにしたいと思います。内:foos
に複数のネストされたリソースがある場合、すべてのリソースに対してコントローラーを定義する必要はありません。