获取Rails嵌套资源以路由以更正嵌套控制器

CIT*_*guy 8 controllers rails-routing nested-resources ruby-on-rails-3.2

在Rails 3.2.11中,我有以下路由定义

resources :foos do
    resources :bars
    resources :bangs, :controller => 'foos/bangs'
end
Run Code Online (Sandbox Code Playgroud)

这导致以下路线

     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
Run Code Online (Sandbox Code Playgroud)

路径都是正确的,但控制器路由只是正确的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
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不再是这种情况.这种行为何时发生变化?如何在Rails 3.2.11中获得相同的功能?

编辑:我resources :bangs在正确的控制器映射中意识到结果,但我希望能够隐式完成.如果我有几个嵌套资源:foos,我不想为每个资源定义控制器.

Phi*_*rks 25

您可以添加范围以指定模块.Rails假定嵌套资源的控制器本身不是嵌套的.

resources :foos do
    scope module: :foos do
        resources :bars
        resources :bangs
    end
end
Run Code Online (Sandbox Code Playgroud)