2010-12-11 33 views
2

我在尋找rails 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)方法,當然是機架接口將被調用到了,我們看到這一行(https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147)在您的env["action_dispatch.request.path_parameters"]屬性實際設置,並最終返回到你的代碼調查。

希望這會有所幫助!