Blokuj komentarze w szablonach html.erb w railsach


120

Jak komentujesz html zmieszany z kodem ruby?

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

W jsp to naprawdę proste: <%-- ... --%>ale nie mogę znaleźć żadnej zwięzłej opcji w railsach.

Proste komentarze html <!-- ... -->nie działają: kod ruby ​​jest nadal wykonywany i generuje błędy.

Jest opcja do używania if falsez komentarzami HTML, ale jest dość rozwlekła, nie wspominając o tym, że IDE jej nie obsługują.

Jest też opcja pochodząca z czystego rubinu, która zaskakująco działa.

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

Generalnie jest w porządku, z wyjątkiem tego, że jest rozwlekły, dziwnie wyglądający i żadne z Ruby IDE, które znam, nie obsługuje go (tak, lubię komentować / komentować jednym naciśnięciem klawisza).

Ciekaw jestem, czy jest jakikolwiek „oficjalny” sposób robienia tego w railach?

Dzięki!

Odpowiedzi:


115

Nie liczyłbym się jako rozwiązanie, ale być może zamknięcie kawałka między

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

lub jeśli poczujesz się trochę brudny, stwórz pomocnika, który po prostu nic nie wyświetla.

Nigdy tego nie potrzebowałem, ale potknąłem się, że nie ma na to gotowego rozwiązania.


@Chloe Nie jestem pewien, dlaczego skierowałeś swój komentarz do mnie, ale masz całkowitą rację <%= false %>, nie zadziała. Powinieneś jednak wypróbować podane rozwiązanie, które działałoby <% if false %>bez znaku =
jamesc

@jamesc Twój komentarz został usunięty, zanim zobaczyłeś moją odpowiedź. Ktoś usunął Twój komentarz w miejscu, w którym powiedziałeś, że ma go używać <%# if false %>.
Chloe

162

Użyj tego do komentowania pojedynczych linii:

<%# your_ruby_code %>

W przypadku wielu wierszy

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

To, co powiedziałeś, zadziała.


2
Wiem, że tak, interesuje mnie, czy jest coś prostszego :)
Nikita Rybak

2
= początek Myślę, że początek - koniec byłby wszystkim = koniec # Możesz zignorować mój komentarz, ponieważ jest on całkowicie skomentowany: P
Garfield

3
działa, jeśli = jest na początku nowej linii, tak jak w odpowiedzi
dhaval

co jeśli tak jest <% =%>? Gdzie poszedłby skrót - przed czy po znaku równości?
BKSpurgeon

Ups, próbowałem dodać komentarz z kodem wielowierszowym. Zamiast tego opublikuje odpowiedź.
ViggoV

29

To =beginpodejście jest denerwujące, ponieważ:

  1. Nie działa w przypadku mieszanego kodu HTML i Ruby (lub po prostu HTML) znajdującego się w jednej linii
  2. Pisanie jest denerwujące

To <% if false %>podejście działa, ale wygląda dziwnie i nie daje nikomu, kto spojrzy na Twój kod, podpowiedzi na temat Twoich zamiarów.

Moje rozwiązanie jest następujące:

W application_helper.rb, dodaj metodę, więc:

def comment
end

Następnie w szablonie widoku możesz powiedzieć:

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

To działa, ponieważ każda metoda Rubiego może przyjąć blok, ale dyskretnie zignoruje przekazany blok, jeśli twoja metoda nie zawiera yield.


3
Możesz nawet zapisać to jako <% comment do%> ... <% comment end%>. Dodałem tę składnię do wysublimowanego tekstu, aby wyglądał nawet jak prawdziwy komentarz.
Mariano Cavallo

1
Cudowne rozwiązanie !! Jedno ulepszenie: komentowanie kodu, aby go wyłączyć, to rodzaj hackowania, więc raczej wywołaj metodę ignorelub disablei otrzymamy w pełni semantyczne rozwiązanie:<% ignore do %>…<% end %>
tanius


7

W przypadku komentarzy blokowych w szablonach mój edytor tekstu (Komodo) uważa tę odmianę rekomendacji @ Garfielda za najmniej nieprzyjemną:

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

6

Aby skomentować tagi erb, użyj symbolu hash komentarza ruby ​​przed znakiem = w otwierającym tagu

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

O ile rozumiem, szuka wielowierszowego rozwiązania do komentowania: jeśli mam blok n wierszy, chcę tylko móc dodać wiersz na górze i na dole (lub może kilka) i mieć to praca. Nie chcę edytować całego bloku.
dionyziz

6

Ponieważ możesz użyć <% %>do umieszczenia bloku ruby, z pewnością można go użyć do wstawienia do niego komentarzy.

Prostsze i eleganckie rozwiązanie wyglądałoby jak ...

<%
# 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
To nie działa. Wszelkie znaczniki ruby ​​wewnątrz komentarza do bloku zamkną zewnętrzny blok.
Hovis Biddle

4

Po = begin nie musisz umieszczać%>

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

To tylko dodatek do niektórych poprzednich odpowiedzi. Wydaje mi się, że rozwiązanie = begin / = end jest najbardziej przydatne, ale ze względu na piękno piszę to tak:

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

Zwróć uwagę, że ponieważ wszystko jest ignorowane do momentu, w którym =endnie ma potrzeby zamykania =begintagu %>lub otwierania =endtagu za pomocą <%(co również zostało wskazane we wcześniejszej odpowiedzi)

Okazało się, że jest to najbardziej eleganckie rozwiązanie, aby całkowicie odkomentować blok mieszanego kodu ruby ​​i html, a także wyszarzać go w moim edytorze, w przeciwieństwie do <% if false %>rozwiązania. Jedyną wadą jest to, że =begini =endmusi być umieszczony na samym początku linii ..


1
Otrzymuję ten błąd: „osadzony dokument spełnia koniec pliku”
Kieran Andrews,

2

Użyj komentarza HEREDOC

Plusy:

  • Nie wymaga wyjaśnienia, że ​​jest to komentarz
  • Działa dla tagów erb i HTML
  • Ma prawidłowe podświetlanie składni (jako jeden długi ciąg)

Cons:

  • Dziwna składnia zamykająca 3 wiersze
  • Brak skrótów klawiaturowych

Kod:

Tag otwierający może być

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

lub

<%
<<-COMMENT
%>

Wszystko tutaj nie będzie działać ani wyświetlać się w przeglądarce

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

Tag zamykający

tak, muszą to być 3 linie 😟. Nie wiem, dlaczego otwierający tag erb jest ważny, ale tak jest! (chyba że w komentarzu nie użyto żadnych tagów erb).

<%      
COMMENT
%>

1

Musisz pamiętać, gdzie kod jest wykonywany. Komentarze w stylu Ruby działają, ponieważ kod Ruby jest wykonywany na serwerze, zanim zostanie przesłany do przeglądarki internetowej. To wyjaśnia również, dlaczego komentarze HTML nie działają - Ruby został już wykonany.

Czy IDE, którego używasz, nie obsługuje tworzenia niestandardowych makr do komentowania bloków kodu?


1) masz rację, komentarze jsp mają nieco inny format, zaktualizowałem post. 2) Nie mogę znaleźć czegoś takiego w IDEA czy Netbeans. Czy miałeś coś konkretnego na myśli mówiąc to o IDE?
Nikita Rybak

1
Nie, nie zrobiłem. Osobiście nie używam IDE do projektów Railsowych.
John Topley,

1

Skrót do komentarza blokowego Sublime Text ctrl+shift+/informuje, czy wybrałeś normalny znacznik HTML lub Erb i wstawia odpowiednio <!---lub <% =begin %>.


Tak, ale to nadal nie spowoduje komentowania zarówno kodu HTML, jak i ruby.
Adamantish

Hmm ... brzmi jak dobry powód do stworzenia niestandardowej wtyczki. Być może w ramach przerwania można nacisnąć, ctrl+daby zaznaczyć wiele początków każdego znacznika Erb <%w bloku, a następnie nacisnąć ctrl+shift+/, a następnie nacisnąć go jeszcze raz, aby cały blok zakomentował kod HTML.
iono

1

Możesz używać jednocześnie komentarzy <% if false%> i HTML:

<%if false%><--

stuff to comment out

--><%end%>

Korzyści to:

  • Kod Ruby nie jest wykonywany

  • Skomentowany blok ma szary kolor w IDE

  • Zamiar jest oczywisty dla innych programistów


0

To jedyny, który działał dla mnie.

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

Mam nadzieję, że właśnie rozwaliłem twój umysł!


-4

Jedynym akceptowalnym rozwiązaniem tego przełomowego problemu, jakie kiedykolwiek znalazłem, było umieszczenie spacji w „<% =”, aby nie był on już rejestrowany jako kod ruby, a następnie zakomentowanie całego bloku za pomocą komentarzy HTML

Lubię to:

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

Tak, dodawanie spacji jest denerwujące. Ale jest to najmniej irytujące ze wszystkich rozwiązań, jakie dotychczas widziałem.


1
Równie dobrze możesz po prostu dodać #... zamiast wysyłać ruby ​​w dokumencie.
maksymalnie
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.