ruby-on-rails-3.2 - 让 Rails 嵌套资源路由到正确的嵌套 Controller

标签 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)            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

路径都正确,但 Controller 路由仅对 resources :bangs 正确. resources :bars应该路由到 foos/bars Controller 而不是 bars Controller 。

以前我可以在 foos/ 中设置命名空间 Controller 。处理嵌套资源。
#app/controllers/foos/bars_controller.rb

class Foos::BarsController < ApplicationController
    #/foos/:foo_id/bar/:id available here
end

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

编辑 : 我意识到resources :bangs导致正确的 Controller 映射,但我希望能够隐式完成。如果我在 :foos 中有多个嵌套资源,我不想为每个资源定义 Controller 。

最佳答案

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

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

关于ruby-on-rails-3.2 - 让 Rails 嵌套资源路由到正确的嵌套 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14369609/

相关文章:

ruby-on-rails - 在多个位置嵌套 Rails 资源

javascript - 将值从 JQuery 传递到我的模型并更新数据库

ruby-on-rails - 如何在 Ruby on Rails 中更改路由名称

php - 将变量从 Controller 传递到 View - Laravel

grails - Grails遍历 Controller 中的对象

ruby-on-rails - 混淆实例变量和局部变量

ruby-on-rails - Heroku 上的 Ruby on Rails 部署 - bootstrap-sass

ruby-on-rails - Ruby on Rails - 将参数传递到 routes.rb 中的 301 重定向

ruby-on-rails - 未初始化常量 ActionController::RedirectBackError 您是说吗? ActionController::渲染错误

binding - Emberjs Controller 需要绑定(bind)