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

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

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

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

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

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

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

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

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

Мне любопытно, есть ли какие-либо "официальные" делания этого в рельсах?

Спасибо!

Ответ 1

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

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

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

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

Ответ 2

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

<%# your_ruby_code %>

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

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

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

Ответ 3

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

  • Это не работает для смешанных HTML и Ruby (или просто HTML), которые на одной строке
  • Досадно печатать

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

Мое решение таково:

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

def comment
end

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

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

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

Ответ 4

Поскольку вы можете использовать <% %> для размещения блока 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 the norm, isn't it?
%>

Ответ 5

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

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

Ответ 6

<%#=

...commented
multiline
block...

%>

Ответ 7

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

<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>
-->

Ответ 8

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

<%
=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 %>

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

<%
=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 %>

Ответ 12

Единственное приемлемое решение, которое я когда-либо встречал в этой обратной проблеме, заключалось в том, чтобы помещать пробел внутри "<% =", чтобы он больше не регистрировался как код ruby, а затем комментировал весь блок с помощью комментариев html

Вот так:

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

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