Блок комментариев в 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 ответов:
Я бы не считал как решение, но, возможно, заключая кусок между
<% if false %> ... <% end %>
или если вы чувствуете себя немного грязный, создайте помощник, который просто ничего не выводит.
Я никогда не нуждался в этом, но я споткнулся, кажется, нет готового решения для этого.
используйте это для комментирования отдельных строк:
<%# your_ruby_code %>
для нескольких строк,
<% =begin %> <% ruby_code %> <% =end %>
то, что вы сказали будет работать.
The
=begin
подход раздражает, потому что:
- он не работает для смешанного HTML и Ruby (или просто HTML), который находится на одной строке
- это раздражает типа
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 ... # %>
чтобы закомментировать теги 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> -->
да, добавление пробелов раздражает. Но это наименее раздражает из всех решений, которые я еще видел.