Rails源码阅读(七)ActionController::Dispatcher_用户请求在rails中的处理流程(2)
Rails源码阅读(七)ActionController::Routing::Routes_用户请求在rails中的处理流程(2)
?
ActionController::Dispatcher把主要工作交给了ActionController::Routing::Routes.call(@env)
ActionController::Routing::Routes的代码:
ActionController::Base.call方法(注意这里是类方法!): class << self def call(env) # HACK: For global rescue to have access to the original request and response request = env["action_controller.rescue.request"] ||= Request.new(env) response = env["action_controller.rescue.response"] ||= Response.new process(request, response) #这里! end # ActionController::Base.process代码: # Factory for the standard create, process loop where the controller is discarded after processing. def process(request, response) #:nodoc: new.process(request, response) end end
?
?
?
总结:
#1 RouteSet的call方法,根据访问链接和路由配置,识别出了应该去找哪个XXXController,同时找哪个action也得到了,放入params:
Parameters: {"method"=>:get, "action"=>"follow", "controller"=>"profile"}
#2 执行XXXController.run方法
到这里,执行流程到了:ActionController::Base,即:ActionController::Base.process方法。
?
?
?
====结束====
=== ? ? ? ? ? ===
== ? ? ? ? ? ? ? ?==
= ? ? ? ? ? ? ? ? ? ? =
| ? ? ? ? ? ? ? ? ? ? ? |
?