0

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

4

1 回答 1

3

Rails 中的视图对象在那里,但它们隐藏在模板基础结构后面。

当控制器对象中的操作方法想要呈现页面时——通过显式调用render或通过返回隐式返回——Rails 基础结构调用 的子类ActionView::TemplateHandlers,传入您的.erb模板和控制器中设置的任何实例变量。模板处理程序解析出 HTML 位,找到嵌入<% %>标签中的 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.

结果是您可以将这些.erb模板视为 MVC 中的视图对象。如果您定义了帮助渲染过程的辅助方法,它们也是视图层的一部分。

于 2013-04-03T17:17:56.530 回答