Когда вы используете <% -%> вместо <%%>

Я заметил, что в некоторых строках представлений рельсов это используется:

<% # Code... -%> 

вместо:

<% # Code... %>

В чем разница?

4 ответа

    <ul>
    <% @posts.each do |post| -%> 
      <li><%=post.title%></li>
    <% end -%>
    </ul>

Там не будет никаких новых строк между <ul> и первый <li> и последнее закрытие </li> а также </ul>, Если бы - было опущено, было бы.

Существуют следующие варианты оценки кода в ERB (к ним можно получить доступ в Textmate с помощью Ctrl-Shift-.):

  • <% %> Просто оцените содержимое.
  • <%= %> Оцените содержимое и выложите результат.
  • <%= -%> Оцените содержимое и распечатайте результат.
  • <%# %> Содержимое рассматривается как комментарий и не выводится.

Обратите внимание на разницу между puts а также print, Puts всегда добавляет новую строку в конце строки, а print - нет.

В основном, -%> говорит не выводить новую строку в конце.

Учти это

<div>
    <% if @some_var == some_value %>
    <p>Some message</p>
    <% end %>
</div>

Код выше приводит к HTML ниже, если @some_var равен some_value

<div>

    <p>Some message</p>

</div>

Если вы вставите закрывающий тег, интерпретатор ERB удалит новые строки для тех, у кого есть кодовый тег, и приведет к следующему

<div>       
    <p>Some message</p>        
</div>

Это полезно, если вам нужен красивый код для HTML. Иногда вы найдете это полезным, работая бок о бок с дизайнером

Надеюсь это поможет.

Немного поздно, но я думаю, что стоит отметить, что вы также можете сделать это:

<%- @posts.each do |post| -%>
  <li><%= post.title %></li>
<%- end %>

Это убирает любые пробелы впереди.

Другие вопросы по тегам