2010-12-11 10 views
2

私はリクエストをディスパッチするプロセスを理解するために、レール3アーキテクチャを検討していました。全体のプロセスは非常に簡単です。アプリケーションは、最後に必要なコントローラの適切なアクションをディスパッチするActionDispatch :: Routing :: RouteSetの呼び出しメソッドにその呼び出しメッセージを委譲するラックアプリケーションです。これは、ラックenvに格納されたハッシュからコントローラー名とアクション名をキー "action_dispatch.request.path_parameters"で取得します。Rails 3リクエストディスパッチサイクル

問題は次のとおりです。誰がこのハッシュを設定しますか?誰がリクエストURIを解析し、アクション名とコントローラ名を決定しますか?

このコードは見つかりませんでした。ルートコンフィグレーション中に、ActionDispatch :: Routing :: Mapperオブジェクトが定義されたルートに関する情報を構築するために使用され、ActionDispatch :: Routing :: RouteSetに格納されていることが分かります。しかし、この情報が、適切なアクションとコントローラを見つけるためのリクエスト中にどのように使用されているか。ラックも何とかここに関わっていますか?

答えて

1

"action_dispatch.request.path_parameters" は定数ActionDispatch::Routing::RouteSet::PARAMETERS_KEY(actionpack/LIB/action_dispatch /ルーティング/ route_set.rb)

PARAMETERS_KEYが同じファイルに後で使用::Rack::Mount::RouteSetために建設業者に渡されるように格納されています

::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)を参照してください、そして最終的にあなたがいたコードに戻さ調査中。

希望すると便利です。