我被要求绘制序列图来表示Ruby on rails中的MVC模式。 由于序列图是“对象图”,因此模型,控制器,视图应该是对象。在Ruby on rails中,有模型,控制器的对象,但在rails中是否有“视图对象”?
答案 0 :(得分:3)
Rails中的视图对象存在,但它们隐藏在模板基础结构之后。
当控制器对象中的action方法想要呈现页面时 - 通过显式调用render
或隐式返回 - 将Rails基础结构调用到ActionView::TemplateHandlers
的子类中,传入{{1} 1}}模板和控制器中设置的任何实例变量。模板处理程序解析HTML位,找到.erb
标记中嵌入的ruby位,并从中构建一个对象。然后它调用对象中的方法来进行渲染。您可以在视图中的代码中出现错误时生成的堆栈跟踪中看到此证据。我通过将<% %>
放在视图中来生成以下错误:
<% 0 / 0 %>
方法divided by 0 (ActionView::Template::Error)
./app/views/home/index.html.erb:9:in `/'
./app/views/home/index.html.erb:9:in `block in _app_views_home_index_html_erb___2383790952439350653_70222507697420'
/Users/dpassage/.rvm/gems/ruby-1.9.3-p327/gems/actionpack-3.2.11/lib/action_view/helpers/capture_helper.rb:40:in `block in capture'
/Users/dpassage/.rvm/gems/ruby-1.9.3-p327/gems/actionpack-3.2.11/lib/action_view/helpers/capture_helper.rb:187:in `with_output_buffer'
...
在运行时由_app_views_home_index_html_erb___2383790952439350653_70222507697420
生成。
结果是您可以将这些ActionView
模板视为MVC中的视图对象。如果您定义了帮助渲染过程的辅助方法,它们也是视图层的一部分。