2012-03-01 3 views
0

매우 흥미로운 시나리오가 있습니다 :레일 3 중첩 된 라우팅

전역 이벤트 용 컨트롤러와 회사 별 이벤트 용 컨트롤러를 두 번 지정했습니다. 루트에서는, 다음과 같이 지정됩니다

resources :companies do 
    resources :events 
end 
resources: events 

실행 레이크 노선 내가 루트는 생성되는 것을 볼 수 있습니다

events GET /events(.:format) events#index 
company_events GET /companies/:company_id/events(.:format) events#index 

두 경로가 동일한 컨트롤러 (글로벌 한)로 라우팅 것 같다 .. . 나는 이런 식으로 뭔가 들어가 회사/컨트롤러에서 두 번째 컨트롤러가 : 위의 해당 컨트롤러에

class Companies::EventsController < ApplicationController 
# stuff 
end 

그것은 결코 경로에 상관없이 내가 company_evens_pat를 사용하는지 여부 h (@ 회사). 항상 다른 하나에 간다. 당신이 필요로하는 경우

def index 
    if params[:company_id] 
    @events = Company.find(params[:company_id]).events 
    else 
    @events = Events.all 
    end 
end 

당신이를 지정할 수 있지만 : 은 내가 이런 일을하는 것이 좋습니다, 위에서 언급 한 바와 같이, 나는 현재 3.2

+0

내부에있는 회사 :: EventsController을 넣어 당신의 컨트롤러 폴더 안에 폴더를 생성 별도의 컨트롤러, 그것은 단지 당신이 그 이벤트를 표시하기 위해 글로벌 이벤트 컨트롤러의 인덱스 작업에 params [: company_id]를 던져서 건조하게 유지하는 것처럼 보입니다. –

+0

경로에 따라 예상대로 작동합니다. 둘 다 EventsController와 index 메서드로 연결됩니다. 따라야 할 경로에 따라 다른 동작이 필요한 경우 단일 컨트롤러에서 수행 할 수 있습니다. –

답변

2

확인을 사용하고 레일 나를 위해 2.3에서 작동하는 데 사용 컨트롤러 :

resources :companies do 
    resources :events, :controller => "companies/events" 
end 
resources: events 

단지 회사가 당신에게 당신이 필요로 확실

+0

자세한 내용은 다음 문서를 참조하십시오. http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use –

+0

다른 사람을 찾지 못하면이 작업을 수행해야 할 것입니다. 해결책. 그러면 컨트롤러에 수동으로 템플릿을 렌더링해야합니다. 그건 아주 ... 흠. – alexs333

+0

오, 나중에 생각하지 않았다. 템플릿을 공유 폴더에 넣은 다음 동일한 부분 인 –