Блок комментариев в html.шаблоны erb в рельсах


как вы прокомментируете html, смешанный с кодом ruby?

some text <% ... %> more text <%= ... %>
something else
<% ... %>

в jsp это очень просто:<%-- ... --%>, но я не могу найти какой-либо краткий вариант в rails.

простые html комментарии <!-- ... --> не работает: ruby код по-прежнему выполняется и кричит ошибки.

есть возможность использовать if false С комментариями html, но это довольно многословно, не говоря уже о том, что IDEs не поддерживает его.

там также вариант приходит от чистого Рубина, который удивительно работает.

<%
=begin %>
... html and ruby code goes here
<%
=end %>

это вообще нормально, за исключением того, что это многословный, странный вид, и ни один из Ruby IDEs, которые я знаю, не поддерживает его (да, мне нравится комментировать/комментировать одним нажатием клавиши).

мне любопытно, есть ли какой-нибудь "официальный" делать это в rails?

спасибо!

15 102

15 ответов:

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

<% if false %>
   ...
<% end %>

или если вы чувствуете себя немного грязный, создайте помощник, который просто ничего не выводит.

Я никогда не нуждался в этом, но я споткнулся, кажется, нет готового решения для этого.

используйте это для комментирования отдельных строк:

<%# your_ruby_code %>

для нескольких строк,

<% 
=begin %>  <% ruby_code %>
<% 
=end %>

то, что вы сказали будет работать.

The =begin подход раздражает, потому что:

  1. он не работает для смешанного HTML и Ruby (или просто HTML), который находится на одной строке
  2. это раздражает типа

The <% if false %> подход работает, но это выглядит странно и не дает никому, кто смотрит на ваш код намек о ваших намерениях.

мое решение заключается в следующем:

на application_helper.rb добавить способ так:

def comment
end

тогда на ваш взгляд шаблон, можно сказать:

<% comment do %>Some stuff that won't be rendered...<% end %>

это работает, потому что любой метод Ruby может взять блок, но будет молча игнорировать переданный блок, если ваш метод не включает yield.

Так как вы можете использовать <% %> чтобы поместить блок ruby, его можно, конечно, использовать для ввода комментариев в него.

более простое и элегантное решение будет выглядеть...

<%
# See! I am a Ruby Comment
# And I am multi-line
# I look like a recognizable ruby comment block too
# and not so complex
# The only drawback with me is the Hash symbol you have to repeat
# But it's the norm, isn't it?
%>

для блокировки комментариев в шаблонах мой текстовый редактор (Komodo) находит этот вариант на @Гарфилд наименее противный:

<%# A long multiline comment in a rails template ...
  # line 2
  # and so on ... 
  # %>
<%#=

...commented
multiline
block...

%>

чтобы закомментировать теги erb, используйте хэш-символ ruby comment перед знаком = в открывающем теге

<p>
 This is some text I want to keep
 <%= @some_object.some_attribute %>
</p>
<p>
  I want to keep this text but comment out the erb tag
  <%#= @some_object.another_attribute %>
</p>
<!--
<p>
  I want all of this text commented out including the erb tag
  <%#= @some_object.some_attribute %>
</p>
-->
<!--
<p>
 I just want this html commented out but I want to keep the erb tag
 <%= @some_object.some_attribute %>
</p>
-->

после =begin вам не нужно ставить %>

<%
=begin

code code code code code code 
code code code code code code 
code code code code code code 
code code code code code code 

=end %>

вы должны иметь в виду, когда код выполняется. Комментарии в стиле Ruby работают, потому что код Ruby выполняется на сервере перед его подачей в веб-браузер. Это также объясняет, почему HTML-комментарии не работают-Ruby уже выполнен.

разве IDE, которую вы используете, не поддерживает создание пользовательских макросов для комментирования блоков кода?

Sublime Text блок комментарий ярлык ctrl + shift+/ замечает, выбрали ли вы обычный HTML или тег Erb и помещает либо <!--- или <% =begin %> соответственно.

Это единственный, который работал для меня.

<%
=begin %>

code code code code code code 
code code code code code code 
code code code code code code 
code code code code code code 

=end %>

просто дополнение к некоторым из предыдущих ответов. Я нашел решение =begin/=end наиболее полезным, но ради красоты я пишу его так:

<%
=begin
  <p>HTML will be ignored</p>
  <%= 'and so will ruby' %>
  <p>
    <%= 'plus the whole block will be greyed in editor' %>
  </p>
=end
%>

обратите внимание, что так как все игнорируется до тех пор, пока =end нет необходимости закрывать =begin тег %> или откройте =end тег <% (что также было указано в более раннем ответе)

я обнаружил, что это самое элегантное решение для полного завершения блока смешанного Рубина и html-код, и он также выделен серым цветом в моем редакторе, в отличие от <% if false %> решение. Единственный недостаток в том, что =begin и =end должно быть помещено в самом начале строки..

вы можете использовать как , так и HTML-комментарии одновременно:

<%if false%><--

stuff to comment out

--><%end%>

преимущества:

  • Ruby код не выполняется

  • комментируемый блок имеет серый цвет в IDE

  • намерение очевидно для других разработчиков

используйте HEREDOC под названием comment

плюсы:

  • само собой разумеется, что это комментарий
  • работает для ERB и HTML тегов
  • имеет подсветку синтаксиса ok (как одна длинная строка)

плюсы:

  • странный синтаксис закрытия 3 строк
  • нет сочетания клавиш

код:

открывающий тег может будь

<% <<-COMMENT %>

the above closing erb tag is just for looks (to match the end),
but don't put anything else there, it may show up on the page

или

<%
<<-COMMENT
%>

здесь ничего не будет работать или отображаться в браузере

<P>
    this will not be displayed in the browser
    <strong> even in the developer's tools </strong>
</p>

<% 1_000_000_000_000.times do |count| %>

for the <%= count %>'th time, this won't run a trillion times,
this is all just a string

all of these %>, <%, <% end %>, end, do, <!--, won't cause any issues.

but the below opening erb tag is important (if you used any erb tags in the comment).
I have no clue why?

закрывающий тег

да, это должно быть 3 строки . Я не знаю, почему открытие тега erb важно, но это так! (если вы не использовали какие-либо теги erb в комментарии).

<%      
COMMENT
%>

единственное приемлемое решение, которое я когда-либо находил для этой непосильной проблемы, состояло в том, чтобы поместить пробел в"

такой:

<!--
<p>
  < %= @some_object.some_attribute %>
</p>
<p>
  < %= @some_object.another_attribute %>
</p>
<p>
  < %= @some_object.some_attribute %>
</p>
<p>
  < %= @some_object.some_attribute %>
</p>
-->

да, добавление пробелов раздражает. Но это наименее раздражает из всех решений, которые я еще видел.