2011-04-01 143 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嵌套的資源?