Блокировать комментарии в шаблонах html.erb в рельсах - PullRequest
110 голосов
/ 27 июня 2010

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

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

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

Простые html комментарии <!-- ... --> не работают: код ruby ​​все еще выполняется и выдает ошибки.

Есть опция для использования if false с html-комментариями, но она довольно многословна, не говоря уже о IDE, ее не поддерживающей.

Есть также опция от чистого ruby, что удивительноработает.

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

В целом все нормально, за исключением того, что он многословный, странно выглядящий и ни один из ruby ​​IDE, который я знаю, не поддерживает его (да, я люблю комментировать / комментировать одним нажатием клавиши).

Мне любопытно, есть ли "официальные" лица, занимающиеся этим на рельсах?

Спасибо!

Ответы [ 15 ]

154 голосов
/ 27 июня 2010

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

<%# your_ruby_code %>

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

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

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

109 голосов
/ 27 июня 2010

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

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

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

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

24 голосов
/ 10 июня 2014

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

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

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

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

В application_helper.rb добавьте метод так:

def comment
end

Затем в своем шаблоне представления вы можете сказать:

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

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

8 голосов
/ 09 июня 2014
<%#=

...commented
multiline
block...

%>
7 голосов
/ 21 марта 2013

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

<%# A long multiline comment in a rails template ...
  # line 2
  # and so on ... 
  # %>
6 голосов
/ 30 августа 2014

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

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

<%
# 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?
%>
6 голосов
/ 23 июля 2011

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

<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>
-->
4 голосов
/ 15 февраля 2016

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

<%
=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 %>
1 голос
/ 22 мая 2018

Просто дополнение к некоторым из предыдущих ответов. Я нашел решение = 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 с помощью <% (на который также указывалось ранее. ответить)

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

1 голос
/ 12 декабря 2012

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

...