HTML Diff
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>