Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3.2 获取Rails嵌套资源以路由到正确的嵌套控制器_Ruby On Rails 3.2_Rails Routing_Controllers_Nested Resources - Fatal编程技术网

Ruby on rails 3.2 获取Rails嵌套资源以路由到正确的嵌套控制器

Ruby on rails 3.2 获取Rails嵌套资源以路由到正确的嵌套控制器,ruby-on-rails-3.2,rails-routing,controllers,nested-resources,Ruby On Rails 3.2,Rails Routing,Controllers,Nested Resources,在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

在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
路径都是正确的,但控制器路由仅对
资源:bangs
正确。
resources:bar
应该路由到
foos/bar
控制器,而不是
bar
控制器

过去我可以在
foos/
中设置命名空间控制器来处理嵌套资源

#app/controllers/foos/bars_controller.rb

class Foos::BarsController < ApplicationController
    #/foos/:foo_id/bar/:id available here
end
#app/controllers/foos/bar_controller.rb
类Foos::BarsController
然而,情况似乎不再如此。这种行为是什么时候改变的?我如何在Rails 3.2.11中获得相同的功能

编辑:我意识到
参考资料:bangs
会产生正确的控制器映射,但我希望能够隐式地完成。如果我在
:foos
中有多个嵌套资源,我不想为每个资源定义控制器

#app/controllers/foos/bars_controller.rb

class Foos::BarsController < ApplicationController
    #/foos/:foo_id/bar/:id available here
end
resources :foos do
  resources :bars, :controller -> 'foos/bars'
  resources :bangs, :controller => 'foos/bangs'
end

这不是您所需要的吗?

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

resources:foos-do
作用域模块::foos do
资源:酒吧
资源:刘海
结束
结束

是和否。我不想为每个资源指定控制器。在rails 2.3应用程序中,嵌套资源足以映射正确的路径和控制器。是的,这是一种方法。我忘了我这里还有这个问题。我想其他人可能仍然会觉得你的问题相关。@PhillSparks,你能看看这个问题吗?几乎一样,但我想不出来。