пятница, 30 января 2015 г.

Шаблонизатор haml вместо erb

В веб-фреймворке Ruby on Rails есть отличная возможность подключить новый шаблонизатор haml вместо имеющегося стандартного erb-шаблонизатора. Для этого достаточно в Gemfile проекта добавить строчку:  
gem "haml"

Так выглядит erb-шаблон для отображения товаров - index.html.erb:
<h1>Listing products</h1>
<% if notice %>
  <p id="notice"><%= notice %></p>
<% end %>

<table class="products">
<% @products.each do |product| %>
  <tr class="<%= cycle('list_line_odd', 'list_line_even') %>">
    <td>
      <%= image_tag(product.image_url, class: 'list_image') %>
    </td>
    <td class="list_description">
      <dl>
        <dt><%= product.title %></dt>
        <dd><%= truncate(strip_tags(product.description),
               length: 80) %></dd>
      </dl>
    </td>
    <td class="list_actions">
      <%= link_to 'Показать', product %><br/>
      <%= link_to 'Ред.', edit_product_path(product) %><br/>
      <%= link_to 'Удалить', product, method: :delete,
                  data: { confirm: I18n.t('app.delete_confirm') } %>
    </td>
  </tr>
<% end %>
</table>
<br />
<%= link_to 'New product', new_product_path %>

А вот тот же шаблон с использованием haml - index.html.haml:
%h1 Listing products
- if notice
  %p#notice= notice
%table.products
  - @products.each do |product|
    %tr{class: "#{cycle('list_line_odd', 'list_line_even')}"}
      %td
        %p= image_tag(product.image_url, class: 'list_image')
      %td.list_description
        %dl>
          %dt= product.title
          %dd= truncate(strip_tags(product.description), length: 80)
      %td.list_actions
        = link_to 'Показать', product
        %br/
        = link_to 'Ред.', edit_product_path(product)
        %br/
        = link_to 'Удалить', product, method: :delete, data: { confirm: I18n.t('app.delete_confirm') }
%p= link_to 'New product', new_product_path

Если вы используете в работе Ruby on Rails, использование шаблонизатора haml позволит вам сократить количество кода в ваших шаблонах и сделает их более читаемыми. Поначалу может показаться, что нет смысл учить чью-то придумку, ведь есть старый добрый html. Однако в больших проектах кода много и его читаемость можно улучшить применив этот шаблонизатор. Кроме того, правила haml-шаблонизатора весьма просты, освоить их можно минут за 20, проделав самостоятельно примеры, приведенные на официальном сайте шаблонизатора haml.

Также есть аналогичный шаблонизатор - slim, синтаксис которого еще лучше. Однако, у нас в проекте используется haml, поскольку "так исторически сложилось".