6

在Rails 3.2.11,我有以下路由定义获得Rails的嵌套资源路由到正确的嵌套控制器

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 :bangsresources :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内有多个嵌套资源,我不想为每个资源定义控制器。

回答

17

您可以添加一个作用域来指定模块。 Rails假定嵌套资源的控制器本身并不嵌套。

resources :foos do 
    scope module: :foos do 
     resources :bars 
     resources :bangs 
    end 
end 
+0

是的,这是做到这一点的方法。我忘了我还有这个问题。 – CITguy

+0

我想其他人可能仍然会发现你的问题相关。 –

+0

@PhillSparks,你可以看看这个问题吗?这几乎是一样的,但我无法弄清楚。 http://stackoverflow.com/questions/35672666/rails-structuring-routes-controller-views-for-nested-resources –

1
resources :foos do 
    resources :bars, :controller -> 'foos/bars' 
    resources :bangs, :controller => 'foos/bangs' 
end 

这不是你要求的吗?

+0

是和否。我想**不**必须为每个资源指定控制器。在rails 2.3应用程序中,嵌套资源足以映射正确的路径和控制器。 – CITguy