Блокуйте коментарі в шаблонах html.erb в рейках


120

Як ви коментуєте html, змішаний з рубіновим кодом?

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

У jsp це дуже просто:, <%-- ... --%>але я не можу знайти жодного стислого варіанту в рейках.

Прості коментарі html <!-- ... -->не працюють: рубіновий код все ще виконується і кричить помилки.

Є можливість використовувати if falseз html коментарями, але це досить багатослівно, не кажучи вже про IDE, це не підтримує.

Також є варіант із чистого рубіну, який дивно працює.

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

Це взагалі добре, за винятком того, що він багатослівний, дивний на вигляд і жоден з рубінових IDE, які я знаю, це підтримують (так, мені подобається коментувати / коментувати одним натисканням клавіші).

Мені цікаво, чи є хтось "чиновник" робити це в рейках?

Дякую!

Відповіді:


115

Я б не вважав це рішенням, але, можливо, вклавши шматок між

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

або якщо ви відчуваєте трохи брудності, створіть помічника, який просто нічого не дає.

Мені це ніколи не було потрібно, але я наткнувся, мабуть, для цього не існує нестандартного рішення.


@Chloe Не зовсім впевнений, чому ти направив мені свій коментар, але ти абсолютно коректний, <%= false %>нічого не вийде. Ви повинні спробувати рішення при умови , хоча , яка б працювала <% if false %>без знака =
jamesc

@jamesc Ваш коментар видалено, перш ніж ви побачили мою відповідь. Хтось видалив ваш коментар, де ви сказали використовувати <%# if false %>.
Хлоя

162

Використовуйте це для коментування окремих рядків:

<%# your_ruby_code %>

Для декількох рядків

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

Те, що ви сказали, спрацює.


2
Я знаю, що це було б, мені цікаво, чи є щось простіше :)
Микита Рибак

2
= початок Я думаю, що початок - кінець буде все = кінець # Ви можете проігнорувати мій коментар, оскільки його повністю прокоментували: P
Гарфілд

3
він працює, якщо = знаходиться на початку нового рядка так само, як у відповіді
dhaval

що робити, якщо це так <% =%>? Куди б пішов хеш - до або після знаку рівності?
BKSpurgeon

На жаль, спробували додати коментар із багаторядковим кодом. Натомість надішлемо відповідь.
ViggoV

29

=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 може приймати блок, але мовчки ігнорує блок, що передається, якщо ваш метод не містить a yield.


3
Ви навіть можете написати це як <% comment do%> ... <% comment end%>. Я додав цей синтаксис до піднесеного тексту, щоб він навіть виглядав як справжній коментар.
Mariano Cavallo

1
Прекрасне рішення !! Одне вдосконалення: коментувати код, щоб його відключити, це свого роду хак, тому скоріше зателефонуйте до методу ignoreабо, disableі ми отримаємо повністю семантичне рішення:<% ignore do %>…<% end %>
tanius



6

Щоб коментувати теги 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>
-->

Наскільки я розумію, він шукає багатолінійне рішення для коментарів: Якщо у мене є блок з n рядків, я просто хочу мати змогу додати рядок вгорі та внизу (а може, пару) і мати його робота. Мені не хочеться редагувати весь блок.
dioyziz

6

Так як ви можете використовувати <% %> для розміщення рубінового блоку, його, безумовно, можна використовувати для коментарів.

Більш просте і елегантне рішення виглядатиме так ...

<%
# 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
Це не працює. Будь-які рубінові теги всередині блоку коментаря закриють зовнішній блок.
Ховіс Біддл

4

Після = початку вам не потрібно ставити%>

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

2

Просто доповнення до деяких попередніх відповідей. Я вважаю, що рішення = 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повинен бути розміщений на самому початку лінії ..


1
Я отримую цю помилку: "вбудований документ відповідає кінці файлу"
Kieran Andrews

2

Використовуйте HEREDOC з назвою коментаря

Плюси:

  • Пояснюючи себе, що це коментар
  • Працює для тегів erb та HTML
  • Має добре виділення синтаксису (як один довгий рядок)

Мінуси:

  • Дивний синтаксис закриття 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
%>

1

Ви повинні мати на увазі, де виконується код. Коментарі в стилі Ruby працюють, оскільки код Ruby виконується на сервері до того, як він подається у веб-браузер. Це також пояснює, чому коментарі HTML не працюють - Ruby вже виконано.

Чи не IDE, який ви використовуєте, підтримує створення спеціальних макросів для коментування блоків коду?


1) ви праві, коментарі jsp мають трохи інший формат, я оновив пост. 2) Я не можу знайти нічого подібного в IDEA або Netbeans. Чи було у вас щось на увазі, що це сказав?
Микита Рибак

1
Ні, я цього не зробив. Особисто я не використовую IDE для проектів Rails.
Джон Топлі

1

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


Так, але це все ще не буде коментувати як HTML, так і рубін.
Адамантиш

Хм ... звучить як добра причина для користувацького плагіна. Можливо, в якості зупинки ви можете натиснути, ctrl+dщоб багаторазово вибрати початок кожного тегу Erb <%всередині блоку, а потім натиснути ctrl+shift+/, а потім натиснути його ще раз для всього блоку, щоб прокоментувати HTML.
іоно

1

Ви можете одночасно використовувати як коментарі <%, якщо false%>, так і HTML:

<%if false%><--

stuff to comment out

--><%end%>

Переваги:

  • Код Ruby не виконується

  • Коментований блок має сірий колір у IDE

  • Намір очевидний для інших розробників


0

Це єдиний, хто працював на мене.

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


0
<% %w(
  <span title="<%= title %>">hello</span>
) %>

Я сподіваюся, що щойно я підірвав ваші розуми!


-4

Єдиним прийнятним рішенням, яке я коли-небудь знаходив у цій переломній проблемі, було поставити пробіл у межах <<= = ", щоб він більше не реєструвався як рубіновий код, а потім прокоментував весь блок із коментарями 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>
-->

Так, додавання пробілів дратує. Але це найменше дратує всіх рішень, які я ще бачив.


1
Ви також можете просто додати #... замість того, щоб надсилати рубін у документ.
макс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.