Rails использует шаблоны ERB
для визуализации представлений или, скажем, генерации html
документов для браузеров и др.
ERB
копирует текстовые части шаблона непосредственно в сгенерированный документ, и обрабатывает только тот код, который идентифицирован маркерами. Существует в основном два типа маркеров <% %>
и <%= %>
.
Тег со знаком равенства указывает, что заключенный код является выражением и что средство визуализации должно заменить элемент кода результатом кода (в виде строки) при отображении шаблона.
Теги без знака равенства означают, что прилагаемый код является скриптлетом. Каждый скриптлет перехватывается и исполняется, а конечный результат кода затем вводится в вывод в точке скриптлета.
<% @attributes.each do |element| %>
<%= puts element.to_s %>
<% end %>
В приведенном выше примере вы говорите, что средство визуализации должно поместить все, что результат выражения во второй строке, который является выходом элемента.
В то время как здесь <%= @attributes.each { |element| puts element.to_s }%>
вы просите рендеринг поставить объект / переменную @attributes
вместе с отдельным выводом того, что есть внутри переменной @attributes
, которая объясняет разницу в ваших выходных результатах.
PS вы можете избегать puts
и to_s
из <%= puts element.to_s %>
, потому что все, что находится внутри <%= %>
, попадает в HTML документ в виде самой строки.