首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Rails源码阅览(八)ActionController:Base_用户请求在rails中的处理流程(3)

2012-12-18 
Rails源码阅读(八)ActionController::Base_用户请求在rails中的处理流程(3)Rails源码阅读(八)ActionContro

Rails源码阅读(八)ActionController::Base_用户请求在rails中的处理流程(3)

Rails源码阅读(八)ActionController::Base_用户请求在rails中的处理流程(3)

?

执行流程从路由找到真正要执行的XXXController后,会执行super方法,即ActionController::Base.process方法

?

?

# 返回结果用send_response

? ? ? #send_response的代码

回到请求的入口处:app.call(env).to_a

从这里应该推测出,response应该有to_a方法,返回符合rack标准的接口。

找了找Response里没有,应该去看看其super-class,果然是:

class Response < Rack::Response

在Rack::Response中定义了to_a方法,代码如下:

      # Renders according to the same rules as <tt>render</tt>, but returns the result in a string instead      # of sending it as the response body to the browser.      def render_to_string(options = nil, &block) #:doc:        render(options, &block)      ensure        response.content_type = nil        erase_render_results        reset_variables_added_to_assigns      end

这个方法很好用,尤其是在处理js和ajax 的时候,不再需要在controller里面写太多拼凑字符串了,直接用erb模板,就如同写view一样;再例如,需要动态的定制页面生成等给编辑使用,这个时候手写erb不划算。

?

总结:

#1 介绍了XXXController的process方法做了哪些操作以及涉及到的步骤:

new一个当前Controller的实例,调用实例的process方法,

process执行perform_action方法,

perform_action用反射(action名字是路由来的)调用了当前实例的action方法(我们真正编码实现的地方)

之后render,也就是根据页面的得到字符串,状态等信息,response给http的用户

#2 erb页面内容的生成是由@template.render做的。@template是ActionView::Base的实例

这里调用的接力棒到了action_view里

?

?

====结束====

=== ? ? ? ? ? ===

== ? ? ? ? ? ? ? ?==

= ? ? ? ? ? ? ? ? ? ? =

| ? ? ? ? ? ? ? ? ? ? ? |

热点排行