【问题标题】:Rails 3 Multiple Nested Routes Same ControllerRails 3多个嵌套路由相同的控制器
【发布时间】:2011-07-27 16:48:59
【问题描述】:

我有两个嵌套资源,它们都使用父控制器。如何更改参数名称,以便得到params[:parent_id]params[:child_id] 而不是params[:parent_id]params[:id]?否则无法确定我要处理的是哪个孩子。

现在我正在映射每个单独的子路由 match 'child/:child_id' => 'parent#show' 但这几乎违反了 DRY 的每条规则,因为我有大约 5 条这样的路由(并且还会有更多)。

这是我的路线示例:

resources :parent do
  resources :child1, :controller => :parent
  resources :child2, :controller => :parent
end

这是我想做的事

resources :parent do
  resources :child1, :controller => :parent, :key => :child1_id
  resources :child2, :controller => :parent, :key => :child2_id
end

更新

我只是要重做路线,以便父级嵌套在每个子级之下。之所以最初没有这样做,是因为写它们的前同事不知道他在做什么。

这个结果看起来像:

resources :child1 do
  resources :parent
end

resources :child2 do
  resources :parent
end

【问题讨论】:

  • 你能添加你的路由代码和一些你的控制器代码吗?
  • 您是否有特定原因只想使用 parent_controller 而不是 child1_controller 等?

标签: ruby-on-rails-3


【解决方案1】:

让父级成为子级的嵌套资源似乎很奇怪。如果您真的想使用父控制器(但我不确定这是最好的方法),一种方法是保留您的原始路线,这感觉更自然:

resources :parent do
  resources :child1, :controller => :parent
  resources :child2, :controller => :parent
end

并且,在您的控制器中,使用request.path 来区分其来源:

class ParentsController
  before_each :extract_child

  # use @child to find out which child it is...

private
  def extract_child
    request.path =~ /(child\d*)/
    @child = $1
  end
end

但坦率地说,我会问为什么不将控制逻辑放入 ChildsController 并将其视为普通的 Rails-y 嵌套资源?

【讨论】:

    【解决方案2】:

    我只是要重做路线,以便父级嵌套在每个子级之下。之所以最初没有这样做,是因为写它们的前同事不知道他在做什么。

    这个结果看起来像:

    resources :child1 do
      resources :parent
    end
    
    resources :child2 do
      resources :parent
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多