一个请求来了以后,首先是ActionController。
ActionController是rails的控制中心,它本身是一个module,module 里面有一个base类,所有的controller,包括ApplicationController都继承base。
base的主要职责是,解析请求的参数,执行filter,执行action,最后,也是关键的一步,
调用ActionView.base.new得到一个解析template的对象,由ActionView.base完成template的解析。
在ActionController这个module之中由很多其他相关的module被base mixin。ruby就是这种风格,class+module. class是对象的抽象, module是对象中相关功能的集合,是功能的抽象。有的时候感觉两个不相干的对象有类似或同样的功能,但是通过抽取基类的方式把他们搞到一起又有一点勉强。这样的功能最好放到module面。还有的时候觉得一个类太大了,包好若干个大块的功能,每一块的功能也可以抽取出一个module。ActionView::Base只是实现了主干的功能,其他的一些附加的功能,比如:flash,就是用module来实现的。
再得瑟一下ActionView::Base,和controller一样,base里只是主干,根据template的后缀找相应的template的handler,handler负责处理template的解析。其中,base在执行的过程中会load一系列view helper,其中包括application_view_helper.
view helper 被base mixin 以后,里面的方法就可以直接在template上使用。
.html.erb的解析使通过ruby 的ERB template 解析器完成的。
对不对的先这样吧
ActionController是rails的控制中心,它本身是一个module,module 里面有一个base类,所有的controller,包括ApplicationController都继承base。
base的主要职责是,解析请求的参数,执行filter,执行action,最后,也是关键的一步,
调用ActionView.base.new得到一个解析template的对象,由ActionView.base完成template的解析。
在ActionController这个module之中由很多其他相关的module被base mixin。ruby就是这种风格,class+module. class是对象的抽象, module是对象中相关功能的集合,是功能的抽象。有的时候感觉两个不相干的对象有类似或同样的功能,但是通过抽取基类的方式把他们搞到一起又有一点勉强。这样的功能最好放到module面。还有的时候觉得一个类太大了,包好若干个大块的功能,每一块的功能也可以抽取出一个module。ActionView::Base只是实现了主干的功能,其他的一些附加的功能,比如:flash,就是用module来实现的。
再得瑟一下ActionView::Base,和controller一样,base里只是主干,根据template的后缀找相应的template的handler,handler负责处理template的解析。其中,base在执行的过程中会load一系列view helper,其中包括application_view_helper.
view helper 被base mixin 以后,里面的方法就可以直接在template上使用。
.html.erb的解析使通过ruby 的ERB template 解析器完成的。
对不对的先这样吧