11

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/barsbars

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に複数のネストされたリソースがある場合、すべてのリソースに対してコントローラーを定義する必要はありません。

4

2 に答える 2

32

You can add a scope to specify the module. Rails assumes that the controllers for your nested resources are not themselves nested.

resources :foos do
    scope module: :foos do
        resources :bars
        resources :bangs
    end
end
于 2013-06-20T16:42:25.097 に答える
1
resources :foos do
  resources :bars, :controller -> 'foos/bars'
  resources :bangs, :controller => 'foos/bangs'
end

Isn't this what you require?

于 2013-01-17T09:36:12.163 に答える