Меня попросят нарисовать диаграмму последовательности, чтобы представить шаблон MVC в Ruby on rails. Поскольку диаграммы последовательности представляют собой «», », модели, контроллеры, виды должны быть объектами. В Ruby на рельсах есть объекты моделей, контроллеров, но есть ли какие-либо «объекты вида» в рельсах?Любые объекты уровня изображения существуют в Ruby on rails?
ответ
Объекты представления в Rails есть, но они скрыты за инфраструктурой шаблонов.
Когда метод действия в объекте контроллера хочет отобразить страницу - либо явный вызов render
или неявно путем возврата - Рельсы инфраструктуры звонков в подкласс ActionView::TemplateHandlers
, переходящие в вашем .erb
шаблоне и любой переменный экземпляр устанавливаются в контроллер. Обработчики шаблонов анализируют биты HTML, находят рубиновые биты, встроенные в теги <% %>
, и строят объект из него. Затем он вызывает метод в объекте для выполнения рендеринга. Вы можете увидеть доказательства этого в трассировках стека, которые генерируются при возникновении ошибки в коде в вашем представлении. Я произвел ошибку ниже, помещая <% 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. Если у вас есть вспомогательные методы, определенные для помощи в процессе рендеринга, они также являются частью слоя представления.
RoR не имеет просмотров. У него есть только шаблоны. Kinda так же, как у него нет уровня модели, только набор активных экземпляров записей. –