Разница между - % > и %> в рельсах [дубликат]
этот вопрос уже есть ответ здесь:
- в чем разница между в ERB в рельсах? 7 ответов
Я начал некоторые учебники rails и заметил, что некоторые из блоков кода представления похожи на
<h1><%= @subject.name -%></h1>
и другие блоки кода
<h1><%= @subject.name %></h1>
что есть ли разница между -%> и %>
Если вы знаете о некоторых хороших ссылках на синтаксис, на которые вы можете указать мне, это также было бы полезно.
4 ответа:
дополнительные черточки делает Эрб не выводить символ новой строки после закрывающего тега. Нет никакой разницы в вашем примере, но если у вас есть что-то вроде этого:
<div> <% if true -%> Hi <% end -%> </div>
Она будет производить:
<div> Hi </div>
а не так:
<div> Hi </div>
я почти уверен
-
до%>
больше не требуется, и его следует исключить.по крайней мере, в Chrome сгенерированный html выглядит одинаково с помощью
-%>
или%>
.
если вы используете HAML, а не ERB, вы можете сделать что-то подобное с символом меньше или больше, чем после вашего тега.
>
удалит любые пробелы вокруг вашего тега и<
удалить все пробелы в нем..float-left< %p Lorem ipsum dolor sit amet
составляется:
<div class="float-left"><p> Lorem ipsum dolor sit amet </p></div>
и...
%left_tag %inside> %right_tag
составляется:
<left_tag /><inside /><right_tag />
если вы не используете HAML, это определенно стоит проверить.
обновление: этот ответ был неправильным, см. https://stackoverflow.com/a/25626629/895245 вместо этого.
в Ruby 2.1 (не обязательно с рельсами), то
-
удаляет одну пустую строку:
- новая строка должна быть первым символом после
>
- пробелы не удаляются
- удаляется только одна новая строка
- вы должны передать
'-'
возможность использования этопримеры:
require 'erb' ERB.new("<%= 'a' %>\nb").result == "a\nb" or raise begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end ERB.new("<%= 'a' %>\nb" , nil, '-').result == "a\nb" or raise ERB.new("<%= 'a' -%>\nb" , nil, '-').result == 'ab' or raise ERB.new("<%= 'a' -%> \nb" , nil, '-').result == "a \nb" or raise ERB.new("<%= 'a' -%>\n b" , nil, '-').result == 'a b' or raise ERB.new("<%= 'a' -%>\n\nb", nil, '-').result == "a\nb" or raise
Doc:http://ruby-doc.org/stdlib-2.1.1/libdoc/erb/rdoc/ERB.html
Rails 4.1 документирует это в http://api.rubyonrails.org/classes/ActionView/Base.html, и кажется:
использовать ERB по умолчанию на: https://github.com/rails/rails/blob/fcbdac7e82725c388bf5adf56a9a9a16d4efdbe0/actionview/lib/action_view/template/handlers.rb#L10
set
-
по умолчанию: https://github.com/rails/rails/blob/fcbdac7e82725c388bf5adf56a9a9a16d4efdbe0/actionview/lib/action_view/template/handlers/erb.rb#L77однако Rails 4.1 удаляет конечные пробелы, как описано в документе, в то время как чистый ERB этого не делает, поэтому может быть будут и другие отличия.
кроме того, он не удаляет ведущие новые строки, как описано: это может быть ошибка документации. Открыт вопрос по адресу: https://github.com/rails/rails/issues/16766