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

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