Цикл отправки запроса Rails 3
Я смотрел на архитектуру рельсов 3, чтобы понять процесс отправки запроса. Весь процесс довольно прост. Приложение представляет собой приложение стойки, которое, наконец, передает свое сообщение вызова методу вызова ActionDispatch:: Routing:: RouteSet, который отправляет соответствующее действие необходимого контроллера. Он принимает имена контроллеров и действий из хэша, хранящегося в стойке env, с помощью ключа "action_dispatch.request.path_parameters".
Итак, вопрос: кто устанавливает этот хеш? Кто разбирает запрос uri и определяет имена действий и контроллеров?
Мне не удалось найти этот код. Я вижу, что при настройке маршрута объект ActionDispatch:: Routing:: Mapper используется для создания информации об определенных маршрутах и сохраняет его в ActionDispatch:: Routing:: RouteSet. Но как эта информация используется во время запроса, чтобы найти подходящее действие и контроллер. Здесь также как-то задействована стойка?
Ответы
Ответ 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"]
действительно установлен, и в конечном итоге возвращается обратно в код, который вы изучали.
Надеюсь, это поможет!