Ruby on rails上是否存在任何视图层对象?

时间:2013-04-03 16:50:36

标签: ruby-on-rails model-view-controller sequence-diagram

我被要求绘制序列图来表示Ruby on rails中的MVC模式。 由于序列图是“对象图”,因此模型,控制器,视图应该是对象。在Ruby on rails中,有模型,控制器的对象,但在rails中是否有“视图对象”?

1 个答案:

答案 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中的视图对象。如果您定义了帮助渲染过程的辅助方法,它们也是视图层的一部分。