2010-12-11 2 views
2

Я смотрел на архитектуру рельсов 3, чтобы понять процесс отправки запроса. Весь процесс довольно прост. Приложение представляет собой приложение стойки, которое, наконец, передает свое сообщение вызова методу вызова ActionDispatch :: Routing :: RouteSet, который отправляет соответствующее действие необходимого контроллера. Он принимает имена контроллеров и действий из хэша, хранящегося в стойке env, с помощью ключа «action_dispatch.request.path_parameters».Rails 3 запрос на отправку

Итак, вопрос в том, кто устанавливает этот хэш? Кто разбирает запрос uri и определяет имена действий и контроллеров?

Мне не удалось найти этот код. Я вижу, что при настройке маршрута объект ActionDispatch :: Routing :: Mapper используется для создания информации об определенных маршрутах и ​​сохраняет его в ActionDispatch :: Routing :: RouteSet. Но как эта информация используется во время запроса, чтобы найти подходящее действие и контроллер. Здесь также как-то задействована стойка?

ответ

1

«action_dispatch.request.path_parameters» хранится в виде константы ActionDispatch::Routing::RouteSet::PARAMETERS_KEY (actionpack/Lib/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"] фактически установлен, и в конце концов вернулся обратно в код, который вы были расследование.

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

Смежные вопросы