2010-12-11 39 views
2

Je regardais l'architecture des rails 3 afin de comprendre le processus d'envoi d'une demande. L'ensemble du processus est assez simple. Application est une application en rack qui délègue finalement son message d'appel à la méthode d'appel de ActionDispatch :: Routing :: RouteSet qui distribue l'action appropriée du contrôleur nécessaire. Il prend les noms de contrôleur et d'action du hachage stocké dans le rack env par la clé "action_dispatch.request.path_parameters". Donc, la question est: Qui définit ce hachage? Qui analyse la requête uri et détermine les noms des actions et des contrôleurs?Rails 3 demande d'envoi cycle

Je n'ai pas trouvé ce code. Je vois que lors de la configuration de la route, l'objet ActionDispatch :: Routing :: Mapper est utilisé pour construire des informations sur les routes définies et les stocke dans ActionDispatch :: Routing :: RouteSet. Mais comment cette information est utilisée lors de la demande pour trouver l'action et le contrôleur appropriés. Est-ce que le rack est impliqué?

Répondre

1

"action_dispatch.request.path_parameters" sont stockées en tant que ActionDispatch::Routing::RouteSet::PARAMETERS_KEY constant (actionpack/lib/action_dispatch/routage/route_set.rb)

PARAMETERS_KEY est utilisé par la suite dans le même fichier et passé dans le constructer pour ::Rack::Mount::RouteSet

En passant à ::Rack::Mount::RouteSet source ici: https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L22 vous pouvez voir que le nom de l'attribut est stocké.

même fichier, dans la call(env) méthode qui est bien sûr l'interface rack qui sera appelé dans, nous voyons cette ligne (https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147) où votre attribut env["action_dispatch.request.path_parameters"] est effectivement mis, et finalement rentrés dans le code que vous étiez enquêter.

Espérons que cela aide!