Разница между -%> и%> в рельсах
Я начал несколько руководств по рельсам и заметил, что некоторые из блоков кода вида похожи на
<h1><%= @subject.name -%></h1>
и другие кодовые блоки похожи на
<h1><%= @subject.name %></h1>
В чем разница между -% > и% >
Если вы знаете какие-то хорошие ссылки на синтаксис, на которые вы можете указать мне, это также было бы полезно.
Ответы
Ответ 1
Дополнительная тире заставляет ERB не выводить новую строку после закрывающего тега. В вашем примере нет разницы, но если у вас есть что-то вроде этого:
<div>
<% if true -%>
Hi
<% end -%>
</div>
Он будет производить:
<div>
Hi
</div>
а не это:
<div>
Hi
</div>
Ответ 2
Я уверен, что -
до %>
больше не нужен, и его следует оставить без внимания.
Как минимум в Chrome, сгенерированный html выглядит так же, используя -%>
или %>
.
Ответ 3
Если вы используете 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, это определенно стоит проверить.
Ответ 4
UPDATE: этот ответ был неправильным, вместо этого fooobar.com/info/25623/....
В Ruby 2.1 (не обязательно с Rails), -
удаляет одну конечную новую строку:
- Новая строка должна быть первой char после
>
- пробелы не удаляются
- удаляется только одна новая строка
- вы должны передать параметр
'-'
, чтобы использовать его
Примеры:
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 и появляется:
Однако Rails 4.1 удаляет завершающие пробелы как документированные, в то время как чистая ERB не делает, поэтому могут быть и другие отличия.
Кроме того, он не удаляет ведущие новые строки, как задокументировано: это может быть ошибка в документации. Открылась проблема: https://github.com/rails/rails/issues/16766