我有两个嵌套资源,它们都使用父控制器。如何更改参数名称,以便params[:parent_id]
和params[:id]
而不是params[:parent_id]
和params[:child_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
答案 0 :(得分: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嵌套资源呢?
答案 1 :(得分:-2)
我只是要重做路线,以便父母在每个孩子下面嵌套。最初没有这样做的原因是因为写这些的前同事不知道他在做什么。
此结果类似于:
resources :child1 do
resources :parent
end
resources :child2 do
resources :parent
end