2010-12-11 3 views
2

요청을 처리하는 프로세스를 이해하기 위해 레일즈 3 아키텍처를 살펴 보았습니다. 전체 과정은 아주 간단합니다. 응용 프로그램은 최종적으로 호출 메시지를 필요한 컨트롤러의 적절한 조치를 전달하는 ActionDispatch :: Routing :: RouteSet의 호출 메소드에 위임하는 랙 응용 프로그램입니다. "action_dispatch.request.path_parameters"키로 랙 env에 저장된 해시에서 컨트롤러 및 액션 이름을 가져옵니다.레일 3 요청 파견주기

그래서 질문입니다. 누가이 해시를 설정합니까? 누가 uri를 파싱하고 액션과 컨트롤러 이름을 결정합니까?

이 코드를 찾을 수 없습니다. Route Configuration 과정에서 ActionDispatch :: Routing :: Mapper 객체가 정의 된 경로에 대한 정보를 생성하고 ActionDispatch :: Routing :: RouteSet에 저장하는 데 사용됩니다. 그러나이 정보가 적절한 조치와 컨트롤러를 찾는 요청 중에 어떻게 사용되는지. 랙도 여기 어떻게 든 관련되어 있습니까?

답변

1

"action_dispatch.request.path_parameters는"

PARAMETERS_KEY::Rack::Mount::RouteSet 대한 constructer으로 동일한 파일에 나중에 사용 전달 상수 ActionDispatch::Routing::RouteSet::PARAMETERS_KEY (actionpack/LIB/action_dispatch/라우팅/route_set.rb)로서 저장된다

여기 ::Rack::Mount::RouteSet 소스로 이동 : https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L22 그 속성 이름이 저장되어 있습니다.

같은 파일, 아래로 호출되는 랙 인터페이스는 물론입니다 call(env) 방법에있어서, 우리는 당신의 env["action_dispatch.request.path_parameters"] 속성이 실제로 설정이 선 (https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147)를 참조하고, 결국 당신이했던 코드로 다시 돌아 조사 중이다.

희망이 도움이됩니다.