【问题标题】:Getting Rails Nested Resources to Route to correct nested Controllers让 Rails 嵌套资源路由到正确的嵌套控制器
【发布时间】:2013-01-16 23:13:47
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails-3.2 rails-routing controllers nested-resources


    【解决方案1】:

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

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

    【讨论】:

    • 是的,就是这样做的。我忘了我还有这个问题。
    • 我认为其他人可能仍然认为您的问题相关。
    • @PhillSparks,你能看看这个问题吗?这几乎是一样的,但我无法弄清楚。 stackoverflow.com/questions/35672666/…
    【解决方案2】:
    resources :foos do
      resources :bars, :controller -> 'foos/bars'
      resources :bangs, :controller => 'foos/bangs'
    end
    

    这不是你需要的吗?

    【讨论】:

    • 是和不是。我想 NOT 必须为每个资源指定控制器。在 rails 2.3 应用程序中,嵌套资源足以映射正确的路径和控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2011-05-23
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多