2009-06-15 3 views
49

Я начал некоторые рельсы учебники и заметил, что некоторые вид блоков кода, какразница между -%> и%> в рельсах

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

и других кодовых блоков подобны

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

В чем разница между -%> и%>

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

+0

Этот вопрос был задан перед указанным. Хотя я уверен, что наши модераторы знают, что они делают. – Brettski

ответ

80

Дополнительная тире делает ERB не выводить новую строку после закрывающего тега. Там нет никакой разницы в вашем примере, но если у вас есть что-то вроде этого:

<div> 
    <% if true -%> 
    Hi 
    <% end -%> 
</div> 

Он будет производить:

<div> 
    Hi 
</div> 

и не так:

<div> 

    Hi 

</div> 
+7

Большое вам спасибо! Я нашел это, сначала найдя поисковую систему, которая допускает специальные символы, а затем, ища -%>. Это была первая страница, которая появилась. Я использовал http://www.symbolhound.com/ (и я, вероятно, буду использовать его довольно часто сейчас, потому что НЕВОЗМОЖНО искать специальные символы в Google). –

+4

Убедитесь, что при использовании ERB в автономном рубиновом скрипте для передачи 'trim_mode' в' ERB.new', например. 'ERB.new ('myfile.erb', nil, '-')' где '' -'' '' trim_mode', в противном случае он не примет тире –

+0

Это ускользнуло, когда пытаюсь подключиться к ' erb'. Как @Koen. установленный режим настройки обрезки исправляет проблему, и команда имеет возможность ее установить, т. е. ('erb -T '-''). – erran

4

Если вы используете 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 это, безусловно, стоит проверить ,

5

Я уверен, что - до %> больше не нужен, и его следует оставить без внимания.

По крайней мере, в Chrome, сгенерированный html выглядит так же, используя -%> или %>.

+0

Я не воспроизвожу ни в чистом Ruby 2.1, ни Rails 4.1: для удаления новой строки мне либо нужно '-', либо' trim_mode' '<>' (что Rails по умолчанию не задано). –

3

ОБНОВЛЕНИЕ: Этот ответ был неправильным, а вместо этого был указан https://stackoverflow.com/a/25626629/895245.


В Ruby 2.1 (не обязательно с Rails), то - удаляет один ее ведомый символ новой строки:

  • новой строка должна быть первым символом после >
  • без пробелов удаляются
  • только удаляется один символ новой строки
  • вы должны передать опцию '-' использовать его

Примеры:

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

+0

Пыток для демонстрации различий уровня отделки между ERB и Erubis: https://gist.github.com/mikecmpbll/72a32f79dc3821e9d2a8 –

+1

Приобретено за неправильный ответ, указывающий на правильный ответ: - / – Casper

Смежные вопросы