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"] атрибут фактически установлен и в конечном итоге возвращается в код, который вы исследовали.

Надеюсь это поможет!

Другие вопросы по тегам