2011-04-01 4 views
1

부모 컨트롤러를 사용하는 두 개의 중첩 된 리소스가 있습니다. params[:parent_id]params[:id] 대신 params[:parent_id]params[:child_id]이 표시되도록하려면 매개 변수 이름을 어떻게 바꿀 수 있습니까? 그렇지 않으면 내가 다루고있는 아이를 결정할 방법이 없습니다.레일 3 다중 중첩 경로 동일한 컨트롤러

지금은 각 개별 자식 경로 match 'child/:child_id' => 'parent#show'을 매핑하고 있습니다. 그러나 이는 약 5 개의 경로가있는 것과 같이 거의 모든 DRY 규칙을 위반합니다. 여기

내 경로의 예입니다

여기
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

+0

child1_controller 등을 사용하는 대신 parent_controller 만 사용하려는 특별한 이유가 있습니까? – Ant

답변

-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을 사용 : ChildsController으로 제어 로직을 넣어 일반 레일-Y 중첩 된 자원처럼 취급하지 않는 이유

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 

그러나 솔직히를 물어 것?