0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке познакомимся с созданием статических страниц с помощью Rails. А также познакомимся с ресурсным роутингом, который позволяет снизить дублирование кода.</p>
1
<p>В этом уроке познакомимся с созданием статических страниц с помощью Rails. А также познакомимся с ресурсным роутингом, который позволяет снизить дублирование кода.</p>
2
<p>Попробуем создать первое приложение с простой страницей.</p>
2
<p>Попробуем создать первое приложение с простой страницей.</p>
3
<h2>Сервер</h2>
3
<h2>Сервер</h2>
4
<p>Чтобы запустить сервер Rails, необходимо создать новый проект и запустить его командой bin/rails s</p>
4
<p>Чтобы запустить сервер Rails, необходимо создать новый проект и запустить его командой bin/rails s</p>
5
<p>Сервер сообщит о том, что он запустился, и выведет адрес<a><em>http://127.0.0.1</em></a></p>
5
<p>Сервер сообщит о том, что он запустился, и выведет адрес<a><em>http://127.0.0.1</em></a></p>
6
<p>, по которому можно открыть приложение том, что он запустился,</p>
6
<p>, по которому можно открыть приложение том, что он запустился,</p>
7
<p>При создании нового веб-приложения Rails отдает на главной странице страницу-заглушку с логотипом фреймворка и текущей версией Rails и Ruby. Это можно увидеть, если открыть в браузере адрес, на котором запущен сервер.</p>
7
<p>При создании нового веб-приложения Rails отдает на главной странице страницу-заглушку с логотипом фреймворка и текущей версией Rails и Ruby. Это можно увидеть, если открыть в браузере адрес, на котором запущен сервер.</p>
8
<h2>Генерация контроллера</h2>
8
<h2>Генерация контроллера</h2>
9
<p>Мы можем заменить главную страницу приложения на нашу. Для этого необходимо сгенерировать контроллер и добавить ему роут index:</p>
9
<p>Мы можем заменить главную страницу приложения на нашу. Для этого необходимо сгенерировать контроллер и добавить ему роут index:</p>
10
<p>Отменить изменения мы можем командой bin/rails d controller:</p>
10
<p>Отменить изменения мы можем командой bin/rails d controller:</p>
11
<p>Созданный контроллер:</p>
11
<p>Созданный контроллер:</p>
12
<p>При выполнении генератора будет добавлен роут в<em>config/routes.rb</em></p>
12
<p>При выполнении генератора будет добавлен роут в<em>config/routes.rb</em></p>
13
<p>Метод get() создаст обработчик для адреса<em>pages/index</em>, который будет работать в контроллере PagesController.</p>
13
<p>Метод get() создаст обработчик для адреса<em>pages/index</em>, который будет работать в контроллере PagesController.</p>
14
<p>По соглашению Rails будет искать по имени контроллера и метода обработчик. Если необходимо вывести другой шаблон, то можно сделать это с помощью метода метод render().</p>
14
<p>По соглашению Rails будет искать по имени контроллера и метода обработчик. Если необходимо вывести другой шаблон, то можно сделать это с помощью метода метод render().</p>
15
<p>Чтобы на корневой странице открывалась наша страница, заменим в файле роутов метод:</p>
15
<p>Чтобы на корневой странице открывалась наша страница, заменим в файле роутов метод:</p>
16
<p>Вызов root 'pages#index' позволяет добавить корневую страницу, которая будет обрабатываться контроллером PagesController методом index()</p>
16
<p>Вызов root 'pages#index' позволяет добавить корневую страницу, которая будет обрабатываться контроллером PagesController методом index()</p>
17
<h2>Контроллеры</h2>
17
<h2>Контроллеры</h2>
18
<p>Все контроллеры приложения Rails наследуются от контроллера, который наследуется от базового</p>
18
<p>Все контроллеры приложения Rails наследуются от контроллера, который наследуется от базового</p>
19
<h2>Контроллеры и Вью</h2>
19
<h2>Контроллеры и Вью</h2>
20
<p>При создании контроллера с методом, были также созданы шаблоны по имени этого метода</p>
20
<p>При создании контроллера с методом, были также созданы шаблоны по имени этого метода</p>
21
<p>По соглашению Rails будет искать шаблоны по имени контроллера и метода. Так для метода index() путь для вью будет<em>app/views/pages/index.html.erb</em>. В теле метода не нужно вручную указывать Вью.</p>
21
<p>По соглашению Rails будет искать шаблоны по имени контроллера и метода. Так для метода index() путь для вью будет<em>app/views/pages/index.html.erb</em>. В теле метода не нужно вручную указывать Вью.</p>
22
<p>Rails по умолчанию поставляется с шаблонизатором ERB. Он позволяет выводить HTML с помощью Ruby-кода. Важно помнить, что ERB - это обычный код на Ruby, который позволяет выполнять простую логику, например проходиться по коллекции и выводить список элементов.</p>
22
<p>Rails по умолчанию поставляется с шаблонизатором ERB. Он позволяет выводить HTML с помощью Ruby-кода. Важно помнить, что ERB - это обычный код на Ruby, который позволяет выполнять простую логику, например проходиться по коллекции и выводить список элементов.</p>
23
<p>Это можно проверить, добавив в<em>app/views/pages/index.html.erb</em>следующий код:</p>
23
<p>Это можно проверить, добавив в<em>app/views/pages/index.html.erb</em>следующий код:</p>
24
<p>Комментарий мы не увидим, а строку<em>Для конструкций знак = не используется.</em>увидим несколько раз.</p>
24
<p>Комментарий мы не увидим, а строку<em>Для конструкций знак = не используется.</em>увидим несколько раз.</p>
25
<h2>Хелперы</h2>
25
<h2>Хелперы</h2>
26
<p>Предположим есть шаблон и в нём выводятся ссылки</p>
26
<p>Предположим есть шаблон и в нём выводятся ссылки</p>
27
<p>В Rails используется хелпер link_to() для формирования ссылок</p>
27
<p>В Rails используется хелпер link_to() для формирования ссылок</p>
28
<p>При создании роутов в<em>config/routes.rb</em>Rails создает автоматически хелперы. Их можно использовать, чтобы получить ссылки на страницы:</p>
28
<p>При создании роутов в<em>config/routes.rb</em>Rails создает автоматически хелперы. Их можно использовать, чтобы получить ссылки на страницы:</p>
29
<p>Хелпер root_path был создан автоматически. Он ведет на корневую страницу<em>/</em>. Если мы добавим в<em>config/routes.rb</em>новые роуты, то получим новые хелперы</p>
29
<p>Хелпер root_path был создан автоматически. Он ведет на корневую страницу<em>/</em>. Если мы добавим в<em>config/routes.rb</em>новые роуты, то получим новые хелперы</p>
30
<p>Для получения ссылки на корневую страницу создается хелпер root_path. Список хелперов можно посмотреть в списке роутов<a><em>http://localhost</em></a></p>
30
<p>Для получения ссылки на корневую страницу создается хелпер root_path. Список хелперов можно посмотреть в списке роутов<a><em>http://localhost</em></a></p>
31
<p><a><em>/rails/routes</em></a>или командой bin/rails routes</p>
31
<p><a><em>/rails/routes</em></a>или командой bin/rails routes</p>
32
<h2>Шаблоны и Вью</h2>
32
<h2>Шаблоны и Вью</h2>
33
<p>Rails позволяет использовать базовый шаблон и отображать уникальный контент. Контент страницы будет выведен с помощью yield. Шаблоны находятся в директории<em>app/views/layouts</em>.</p>
33
<p>Rails позволяет использовать базовый шаблон и отображать уникальный контент. Контент страницы будет выведен с помощью yield. Шаблоны находятся в директории<em>app/views/layouts</em>.</p>
34
<p>Пример базового шаблона<em>app/views/layouts/application.html.erb</em></p>
34
<p>Пример базового шаблона<em>app/views/layouts/application.html.erb</em></p>
35
<p>Страница<em>app/views/pages/index.html.erb</em>Содержит только уникальный контент</p>
35
<p>Страница<em>app/views/pages/index.html.erb</em>Содержит только уникальный контент</p>
36
<p>Добавим в базовый шаблон навигацию и удалим ее из вью</p>
36
<p>Добавим в базовый шаблон навигацию и удалим ее из вью</p>
37
<p>Теперь ссылки на страницы будут описаны в одном месте и отображаться на всех страницах</p>
37
<p>Теперь ссылки на страницы будут описаны в одном месте и отображаться на всех страницах</p>
38
<h2>Рендер шаблонов в контроллере</h2>
38
<h2>Рендер шаблонов в контроллере</h2>
39
<p>Как мы помним, Rails сопоставляет имя метода и контроллера и выводит подходящий шаблон. Но если мы хотим вывести другой шаблон, мы можем сделать это явно:</p>
39
<p>Как мы помним, Rails сопоставляет имя метода и контроллера и выводит подходящий шаблон. Но если мы хотим вывести другой шаблон, мы можем сделать это явно:</p>
40
<h2>Рендер частичных шаблонов</h2>
40
<h2>Рендер частичных шаблонов</h2>
41
<p>Частичные шаблоны (partials) используются для повторного использования кода. Они начинаются с символа подчеркивания. Рендер частичного шаблона<em>app/views/layouts/shared/_links.html.erb</em></p>
41
<p>Частичные шаблоны (partials) используются для повторного использования кода. Они начинаются с символа подчеркивания. Рендер частичного шаблона<em>app/views/layouts/shared/_links.html.erb</em></p>
42
<p>render partial: требует четкого указания пути и локальной передачи переменных. Обычный render использует переменные в том контексте запроса, в котором вызывается</p>
42
<p>render partial: требует четкого указания пути и локальной передачи переменных. Обычный render использует переменные в том контексте запроса, в котором вызывается</p>
43
<p>Сам файл находится по следующему пути -<em>app/views/pages/partial/_links.html.erb</em></p>
43
<p>Сам файл находится по следующему пути -<em>app/views/pages/partial/_links.html.erb</em></p>
44
<h2>Рендеринг статичных страниц</h2>
44
<h2>Рендеринг статичных страниц</h2>
45
<p>Вместо создания методов для каждой конкретной страницы можно использовать один метод. Вместо:</p>
45
<p>Вместо создания методов для каждой конкретной страницы можно использовать один метод. Вместо:</p>
46
<p>Используем метод show()</p>
46
<p>Используем метод show()</p>
47
<p>Чтобы в будущем воспользоваться хелпером и удобно работать с урлами, используем ресурсный роутинг (подробнее о нём в следующих уроках):</p>
47
<p>Чтобы в будущем воспользоваться хелпером и удобно работать с урлами, используем ресурсный роутинг (подробнее о нём в следующих уроках):</p>
48
<p>Ресурсный роутинг позволяет создавать роуты динамически. Имя страницы будет передаваться в параметрах путей. Например<em>localhost</em></p>
48
<p>Ресурсный роутинг позволяет создавать роуты динамически. Имя страницы будет передаваться в параметрах путей. Например<em>localhost</em></p>
49
<p><em>/pages/term_of_service</em>, где term_of_service - будет параметром ID страницы. У статических страниц будет загружаться вью<em>app/views/pages/show.html.erb</em></p>
49
<p><em>/pages/term_of_service</em>, где term_of_service - будет параметром ID страницы. У статических страниц будет загружаться вью<em>app/views/pages/show.html.erb</em></p>
50
<p>А уникальный для каждой страницы контент находиться в своем шаблоне. Имя шаблона будет начинаться с нижнего подчеркивания</p>
50
<p>А уникальный для каждой страницы контент находиться в своем шаблоне. Имя шаблона будет начинаться с нижнего подчеркивания</p>
51
<ul><li><em>app/views/pages/_about.html.erb</em></li>
51
<ul><li><em>app/views/pages/_about.html.erb</em></li>
52
<li><em>app/views/pages/_term_of_service.html.erb</em></li>
52
<li><em>app/views/pages/_term_of_service.html.erb</em></li>
53
</ul><p>Теперь мы можем использовать один хелпер page_path() и передавать ему параметр с ID страницы</p>
53
</ul><p>Теперь мы можем использовать один хелпер page_path() и передавать ему параметр с ID страницы</p>
54
<h2>Заключение</h2>
54
<h2>Заключение</h2>
55
<p>В этом уроке мы изучили создание статических страниц в Ruby on Rails, включая запуск сервера, генерацию контроллера и настройку роутов.</p>
55
<p>В этом уроке мы изучили создание статических страниц в Ruby on Rails, включая запуск сервера, генерацию контроллера и настройку роутов.</p>
56
<p>Мы узнали, как Rails автоматически сопоставляет методы контроллера с шаблонами представлений, что упрощает разработку, а также рассмотрели использование хелпера link_to() для создания ссылок.</p>
56
<p>Мы узнали, как Rails автоматически сопоставляет методы контроллера с шаблонами представлений, что упрощает разработку, а также рассмотрели использование хелпера link_to() для создания ссылок.</p>
57
<p>Мы познакомились с базовыми шаблонами и их применением для отображения уникального контента, а также с рендерингом других шаблонов и частичных шаблонов для повторного использования кода.</p>
57
<p>Мы познакомились с базовыми шаблонами и их применением для отображения уникального контента, а также с рендерингом других шаблонов и частичных шаблонов для повторного использования кода.</p>
58
<p>В завершение урока мы рассмотрели ресурсный роутинг, который позволяет динамически создавать маршруты для статических страниц, что делает код более организованным и удобным для поддержки.</p>
58
<p>В завершение урока мы рассмотрели ресурсный роутинг, который позволяет динамически создавать маршруты для статических страниц, что делает код более организованным и удобным для поддержки.</p>