我正在查看rails 3架构,以了解调度请求的过程。整个过程非常简单。 Application是一个机架应用程序,它最终将其调用消息委托给ActionDispatch :: Routing :: RouteSet的调用方法,该方法调度必要控制器的相应操作。它通过密钥“action_dispatch.request.path_parameters”从存储在机架env中的哈希中获取控制器和操作名称。
所以问题是:谁设置了这个哈希?谁解析请求uri并确定操作和控制器名称?
我无法找到此代码。我看到在路由配置期间,ActionDispatch :: Routing :: Mapper对象用于构造有关已定义路由的信息,并将其存储在ActionDispatch :: Routing :: RouteSet中。但是在请求期间如何使用此信息来查找适当的操作和控制器。机架也在某种程度上涉及到这里吗?
答案 0 :(得分:1)
“action_dispatch.request.path_parameters”存储为常量ActionDispatch::Routing::RouteSet::PARAMETERS_KEY
(actionpack / lib / action_dispatch / routing / 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
)方法中,当然是将要调用的Rack接口,我们看到这一行(https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147),其中env["action_dispatch.request.path_parameters"]
属性实际上是设置,并最终返回到您正在调查的代码中。
希望这有帮助!