Разница между - % > и %> в рельсах [дубликат]


этот вопрос уже есть ответ здесь:

Я начал некоторые учебники rails и заметил, что некоторые из блоков кода представления похожи на

<h1><%= @subject.name -%></h1>

и другие блоки кода

<h1><%= @subject.name %></h1>

что есть ли разница между -%> и %>

Если вы знаете о некоторых хороших ссылках на синтаксис, на которые вы можете указать мне, это также было бы полезно.

4   51  

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, и кажется:

однако Rails 4.1 удаляет конечные пробелы, как описано в документе, в то время как чистый ERB этого не делает, поэтому может быть будут и другие отличия.

кроме того, он не удаляет ведущие новые строки, как описано: это может быть ошибка документации. Открыт вопрос по адресу: https://github.com/rails/rails/issues/16766