Ruby on Rails основан на модели MVC (Model-View-Controller), распространённой во многих фреймворках. Модель описывает взаимодействие трёх компонентов: модели, представления и контроллера.
MVC-модель: взаимодействие компонентов
Рассмотрим взаимодействие компонентов на примере пользовательского запроса:
- Пользователь (браузер): Отправляет запрос (например, на главную страницу, страницу контактов или статей).
- Контроллер: Обрабатывает запрос, определяя целевую страницу.
- Модель: При необходимости контроллер обращается к модели. Модель может взаимодействовать с базой данных, API (например, Facebook API) или выполнять другие действия. Результат передаётся обратно контроллеру.
- Представление (View): Контроллер передаёт данные из модели в представление – HTML-шаблон. Данные (например, из базы данных) подставляются в шаблон.
- Результат: Сформированная HTML-страница отправляется в браузер пользователя.
Это циклический процесс: запрос → контроллер → модель → контроллер → представление → браузер.
Структура проекта и создание контроллеров
В структуре проекта Rails реализована MVC-архитектура. В корневой папке проекта находятся три основных папки:
- app/controllers: Содержит контроллеры. Главный контроллер — application_controller.rb.
- app/models: Содержит модели (в данном примере пока пусты).
- app/views: Содержит HTML-шаблоны с расширением .html.erb. Расширение .erb указывает на использование Ruby-синтаксиса в HTML. В шаблонах динамически подключаются мета-теги, стили и JavaScript. Папка layouts содержит общий шаблон для всех страниц. Благодаря этому, большая часть HTML-кода остаётся неизменной, изменяется только содержимое, передаваемое из контроллера.
Создание контроллера PostsController и главной страницы
Создадим контроллер для статей (постов) и главную страницу. Для создания контроллера используем терминал:
rails generate controller posts
Это создаст контроллер app/controllers/posts_controller.rb, папку с представлениями app/views/posts и вспомогательные файлы (helpers).
В app/controllers/posts_controller.rb создадим метод index:
def index
end
Этот метод будет обрабатывать запрос на главную страницу.
В app/views/posts/index.html.erb создадим простой HTML-код:
<h3>Главная страница</h3>
Настроим маршрутизацию в config/routes.rb. Удалим комментарий и добавим строку:
root to: 'posts#index'
Это назначает метод index контроллера posts для обработки запроса на корневой URL (/). Запустим сервер и убедимся, что отображается главная страница.
Создание контроллера AboutController и страницы «О нас»
Создадим контроллер для статической страницы «О нас»:
rails generate controller about
Создадим файл app/views/about/about.html.erb:
<h1>Страница про нас</h1>
В config/routes.rb добавим маршрут:
get 'about', to: 'about#about'
В контроллере app/controllers/about_controller.rb:
def about
@heading = "Страница про нас"
@text = "Немного текста"
end
В шаблоне app/views/about/about.html.erb выведем переменные:
<h1><%= @heading %></h1>
<p><%= @text %></p>
Обновим страницу и убедимся, что отображается страница «О нас».
В этом уроке мы рассмотрели модель MVC в Ruby on Rails и научились создавать простые статические страницы. Дальнейшее изучение позволит создавать более сложные и динамичные веб-приложения.