Что такое erb в Rails и как его освоить

  • 31 марта, 16:22
  • 3794
  • 0

В изучении Rails можно встретить несколько странных файлов со странным синтаксисом. Например «name.html.erb». Вопрос: почему этот файл, который выглядит как файл HTML с синтаксисом HTML, имеет расширение .erb после расширения .html?

Что такое erb в Rails и как его освоитьЧто такое erb в Rails и как его освоить

Что такое erb?

'erb' относится к Embedded Ruby, который является механизмом шаблонов, в котором язык Ruby встраивается в HTML. Чтобы было понятнее: движок для использования языка Ruby со всеми его функциями внутри HTML-кода. Rails использует erb в качестве движка по умолчанию для рендеринга.

Чтобы использовать erb в Rails, все файлы должны иметь расширение .html.erb, чтобы Rails обрабатывал их в своем конвейере ресурсов.

Как это работает?

В основном используются три элемента:

Теги выражения <% =%>

Этот тег указывает, что внутри него будет выражение. Основной момент: приложение отобразит результат выполнения кода внутри этого тега. Давайте проверим пример, чтобы сделать его более понятным:

Представьте, что у нас есть модель User, которая имеет следующие атрибуты:

Контроллер попросит модель извлечь первого пользователя из базы данных. Затем он сохранит его в переменной экземпляра с именем @user:

Если мы хотим отобразить первые три пользовательских атрибута в представлении, мы будем использовать HTML и код erb, как показано ниже:

<h1>First User Information</h1>
<ol>
  <li>User id: <%= @user.id %></li>
  <li>User name: <%= @user.name %></li>
  <li>User email: <%= @user.email %></li>
</ol>

И браузер отобразит результаты примерно так:

Помните: приложение будет отображать результат выполнения кода внутри тегов выражений. Например, <% = 2 + 2%> будет отображать 4.

Теги выполнения <%%>

Как и теги выражений, они встраивают код Ruby в HTML. Разница в том, что приложение не будет отображать результат выполнения кода. Давайте рассмотрим пример, чтобы понять его лучше:

Представьте, что вы создаете представление для отображения всех пользователей в вашей базе данных. Контроллер попросит модель извлечь всех пользователей из базы данных (всего 10). Затем он будет хранить их внутри переменной экземпляра с именем @users. У вас есть два способа сделать это: эффективный и неэффективный. 

Очень неэффективным способом отображения списка пользователей будет создание представления, подобного следующему:

<h1>All Users</h1>
<ol>
  <li> <%= @users[0].name %> </li>
  <li> <%= @users[1].name %> </li>
  <li> <%= @users[2].name %> </li>
  <li> <%= @users[3].name %> </li>
  <li> <%= @users[4].name %> </li>
  <li> <%= @users[5].name %> </li>
  <li> <%= @users[6].name %> </li>
  <li> <%= @users[7].name %> </li>
  <li> <%= @users[8].name %> </li>
  <li> <%= @users[9].name %> </li>
</ol>

Это представление будет отображать:

Представьте, что есть не 10 пользователей, а тысячи. Именно тогда цикл становится полезным, и мы можем использовать его с помощью тегов выполнения и тегов выражений, как показано ниже:

<h1>All Users</h1>
<ol>
  <% @users.each do |user| %>
    <li> <%= user.name + ' efficiently displayed' %> </li>
  <% end %>
</ol>

Обратите внимание на три важных момента:

  1. Мы используем цикл «каждый» для перебора пользователей. Таким образом, наш код больше не зависит от количества пользователей в базе данных.
  2. Мы используем теги выполнения (<%%>), чтобы обернуть структуру блока. Это код Ruby, который приложение не будет отображать.
  3. Мы используем теги выражений (<% =%>) для переноса фрагментов кода, отображаемых приложением. В этом случае каждое имя пользователя + текст «качественно отображается».

Ниже вы можете проверить результаты внедрения:

Теги комментариев <% #%>

Используется для размещения комментариев Ruby внутри вашего кода. Например:

<h1>All Users</h1>
<ol>
  <%# loop through every user %>
  <% @users.each do |user| %>
    <li> <%= user.name + ' efficiently displayed' %> </li>
  <% end %>
</ol>

Код внутри тегов комментариев игнорируется в момент создания шаблона.

Важно: Избегайте использования логического тяжелого кода erb. Для этих случаев всегда лучше создать вспомогательный метод для решения этой проблемы.

Источник перевода


0 комментариев
Сортировка:
Добавить комментарий