2010-12-11 83 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"]属性实际设置,并最终返回到你的代码调查。

希望这会有所帮助!