Представления и отображение
Возвращайте ответы
«Представления и отображение» — бесплатный урок Ruby Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Что такое представление
Представление — это шаблон, формирующий ответ, отправляемый клиенту, обычно в формате HTML. Оно превращает данные, подготовленные контроллером, в страницу.
- Представления находятся в
app/views. - Они сгруппированы по контроллерам, например в
app/views/articles. - Имя шаблона по умолчанию совпадает с именем действия.
Рендеринг по соглашению
По умолчанию действие отрисовывает шаблон, названный в его честь. Действие index контроллера ArticlesController отрисовывает app/views/articles/index.html.erb без явного вызова render.
def index
@articles = Article.all
# automatically renders articles/index.html.erb
endШаблоны ERB
Язык шаблонов по умолчанию — ERB (встроенный Ruby). Он сочетает HTML с Ruby:
<%= ... %>выводит значение.<% ... %>выполняет код без вывода.
<h1>Articles</h1>
<% @articles.each do |article| %>
<p><%= article.title %></p>
<% end %>Макеты
Макет оборачивает каждое представление общей разметкой, например заголовком, навигацией и нижним колонтитулом. Макет по умолчанию app/views/layouts/application.html.erb содержит <%= yield %>, куда вставляется представление действия.
<!-- application.html.erb -->
<html>
<body>
<%= yield %>
</body>
</html>Частичные представления
Частичное представление — это повторно используемый фрагмент шаблона, имя файла которого начинается с символа подчёркивания. Отрисовывайте его с помощью render, чтобы не дублировать разметку.
<!-- _article.html.erb -->
<p><%= article.title %></p>
<!-- in index.html.erb -->
<%= render "article", article: @article %>Рендеринг коллекций
Передача коллекции в render отрисовывает частичное представление один раз для каждого элемента — это идиоматическое сокращение. Rails выводит имя частичного представления из модели.
<%= render @articles %>
<!-- renders _article.html.erb for each article -->Вспомогательные средства представлений
Rails предоставляет вспомогательные средства, которые безопасно создают HTML: link_to для ссылок, form_with для форм и image_tag для изображений. Они делают шаблоны чистыми и единообразными.
<%= link_to "View", article_path(@article) %>
<%= image_tag "logo.png" %>Ответы в других форматах
Контроллеры могут возвращать не только HTML. render json: отправляет JSON для API, а respond_to обслуживает разные форматы в зависимости от того, что запросил клиент.
def show
@article = Article.find(params[:id])
render json: @article
endБлоки respond_to
Используйте respond_to, чтобы обрабатывать несколько форматов в одном действии. Одно и то же действие может возвращать HTML браузеру и JSON клиенту API.
def show
@article = Article.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @article }
end
endКоды состояния
Задавайте состояние HTTP-ответа с помощью status:. Используйте :ok (200), :created (201) после успешного создания и :unprocessable_entity (422), если проверка не пройдена, чтобы клиенты реагировали корректно.
render :new, status: :unprocessable_entity
render json: @article, status: :createdЭкранирование и безопасность
ERB автоматически экранирует HTML в выводе <%= %>, что предотвращает межсайтовый скриптинг в пользовательских данных. Помечайте содержимое как безопасное с помощью raw или html_safe только при полной уверенности в его надёжности; неправильное использование снова открывает уязвимости XSS.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете представления и рендеринг.
Итоги: представления и рендеринг
Вы научились возвращать ответы:
- Действия по соглашению отрисовывают соответствующее представление ERB.
- Макеты оборачивают представления, а частичные представления позволяют повторно использовать фрагменты.
- Вспомогательные средства, такие как
link_toиform_with, создают HTML. render json:иrespond_toобслуживают API; задавайте правильные коды состояния.- ERB экранирует вывод, предотвращая XSS.
На этом курс «Контроллеры и маршрутизация» завершён.
Часто задаваемые вопросы
Урок «Представления и отображение» бесплатный?
Да — полный текст урока «Представления и отображение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Представления и отображение»?
Возвращайте ответы Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Представления и отображение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Маршруты и ресурсы
- Контроллеры и действия
- Строгие параметры
- Представления и отображение