2011-04-01 112 views
1

我有两个使用父控制器的嵌套资源。如何更改参数名称,以便取代params[:parent_id]params[:id]我得到params[:parent_id]params[:child_id]?否则,无法确定我正在处理哪个孩子。Rails 3多个嵌套的路由相同的控制器

现在我正在映射每个孩子的路线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 
+0

请问您可以添加您的路线代码和一些控制器代码吗? – Ant 2011-04-01 13:20:21

+0

是否有一个特定的原因,你想只使用parent_controller而不是有child1_controller等? – Ant 2011-04-01 14:44:33

回答

-2

我只是让家长成为每个孩子在嵌套重做路线。之所以没有这样做,原因是前面的同事写了他们不知道他在做什么。

这个结果看起来类似:

resources :child1 do 
    resources :parent 
end 

resources :child2 do 
    resources :parent 
end 
2

这似乎很奇怪,使父子的嵌套资源。如果你真的想使用父控制器(但我不知道这是最好的方式),一种方法是保持原来的路线,这感觉更自然:

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嵌套的资源?