Rails 3 цикл отправки запросов
Я смотрел на архитектуру rails 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 / Библиотека /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
) метод, который, конечно, является интерфейсом Rack, в который мы будем вызывать, мы видим эту строку ( https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147) где твой env["action_dispatch.request.path_parameters"]
атрибут фактически установлен и в конечном итоге возвращается в код, который вы исследовали.
Надеюсь это поможет!