Может кто-нибудь описать использование следующих символов, которые используются в файле ERB:
<% %>
<%= %>
<% -%>
<%# %>
какое использование каждого из них?
Может кто-нибудь описать использование следующих символов, которые используются в файле ERB:
<% %>
<%= %>
<% -%>
<%# %>
какое использование каждого из них?
<% %>
Выполняет код ruby внутри скобок.
<%= %>
Печатает что-то в файле erb.
<% -%>
Предотвращает разрыв строки после выражения.
<%# %>
Код комментария в скобках; не отправляется клиенту (в отличие от комментариев HTML).
Посетите Ruby Doc для получения дополнительной информации об ERB.
<% %>
и <%- and -%>
предназначены для любого кода Ruby, но не выводят результаты (например, инструкции if). два одинаковые.
<%= %>
предназначен для вывода результатов кода Ruby
<%# %>
является комментарием ERB
Вот хорошее руководство: http://api.rubyonrails.org/classes/ActionView/Base.html
Rails не использует stdlib ERB по умолчанию, он использует erubis. Источники: этот комментарий для разработчиков, ActionView gemspec, принятый запрос слияния, который я сделал при написании этого.
Между ними существуют различия в поведении, в частности, о том, как работают дефисные операторы %-
и -%
.
Документация малочисленна, Где формальный формат Ruby от ERB "официально" определяемый?, поэтому последующие эмпирические выводы.
Все тесты предполагают:
require 'erb'
require 'erubis'
Когда вы можете использовать -
-
в trim_mode
вариант ERB.new
, чтобы использовать его.Примеры:
begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= 'a' -%>\nb" , nil, '-') .result == 'ab' or raise
Erubis::Eruby.new("<%= 'a' -%> \n b").result == 'a b' or raise
Что -%
делает:
ERB: удалите следующий символ, если это новая строка.
erubis:
in <% %>
(без =
), -
бесполезен, так как <% %>
и <% -%>
совпадают. <% %>
удаляет текущую строку, если она содержит только пробелы и ничего не делает.
in <%= -%>
(с =
):
Примеры:
# Remove
ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb c" or raise
# Don't do anything: not followed by newline, but by space:
ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise
# Remove the current line because only whitesapaces:
Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise
# Same as above, thus useless because longer.
Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise
# Don't do anything because line not empty.
Erubis::Eruby.new("a <% 0 %> \nb").result == "a \nb" or raise
Erubis::Eruby.new(" <% 0 %> a\nb").result == " a\nb" or raise
Erubis::Eruby.new(" <% 0 -%> a\nb").result == " a\nb" or raise
# Don't remove the current line because of `=`:
Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise
# Remove the current line even with `=`:
Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b" or raise
# Remove forward only because of `-` and non space before:
Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b" or raise
# Don't do anything because non-whitespace forward:
Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb" or raise
Что %-
делает:
ERB: удалять пробелы перед тегом и после предыдущих строк новой строки, но только в том случае, если раньше были только пробелы.
erubis: бесполезно, потому что <%- %>
совпадает с <% %>
(без =
), и это не может использоваться с =
, что является единственным случаем, когда -%
может быть полезным. Поэтому никогда не используйте это.
Примеры:
# Remove
ERB.new("a \n <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise
# b is not whitespace: do nothing:
ERB.new("a \nb <%- 0 %> c\n d", nil, '-').result == "a \nb c\n d" or raise
Что %-
и -%
делают вместе
Точная комбинация обоих эффектов отдельно.
В качестве ответа на этот вопрос я добавил <%%
буквенный тег-разделитель из-за его неясности. Это скажет erb не интерпретировать часть тега <%
которая необходима для js-приложений, таких как отображение подсказок chart.js и т.д.
Обновление (исправлена неработающая ссылка)
Все о ERB теперь можно найти здесь: https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags
<% %>
%% <% %>
: Выполняет рубиновый код<%= %>
: Печатает в файл Erb. Или браузер<% -%>
: предотвращает разрыв строки после выражения.<%# %>
: Комментарий ERBЭто использование в ruby on rails: -
<%% > : -
Теги <%% > используются для выполнения кода Ruby, который не возвращает ничего, например условий, циклов или блоков. Например: -
<h1>Names of all the people</h1>
<% @people.each do |person| %>
Name: <%= person.name %><br>
<% end %>
<% =% > : -
используется для отображения содержимого.
Name: <%= person.name %><br>
<% -% > : -
Rails расширяет ERB, так что вы можете подавлять новую строку просто добавив конечный дефис в теги в шаблонах Rails
<% #% > : -
закомментировать код
<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>
<% %>
выполняет код там, но не печатает результат, например:
Мы можем использовать его для if else в файле erb.
<% temp = 1 %>
<% if temp == 1%>
temp is 1
<% else %>
temp is not 1
<%end%>
Будет ли temp is 1
печати temp is 1
<%= %>
выполняет код, а также выводит результат, например:
Мы можем напечатать значение переменной рельсов.
<% temp = 1 %>
<%= temp %>
Будет напечатан 1
<% -%>
Не имеет значения, поскольку он ничего не печатает, -%>
имеет смысл только с <%= -%>
, это позволит избежать новой строки.
<%# %>
закомментирует код, написанный внутри этого.