web-dev-qa-db-de.com

Blockieren Sie Kommentare in html.erb-Vorlagen in Schienen

Wie kommentieren Sie HTML-Dateien, die mit Ruby-Code gemischt sind?

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

In jsp ist es ganz einfach: <%-- ... --%>, aber ich finde keine prägnanten Optionen in Rails.

Einfache HTML-Kommentare <!-- ... --> funktionieren nicht: Ruby-Code wird noch ausgeführt und ruft Fehler auf. 

Es gibt eine Option, if false mit HTML-Kommentaren zu verwenden, aber es ist ziemlich wortreich, von IDEs ganz zu schweigen, unterstützt es nicht.

Es gibt auch eine Option aus reinem Ruby, die überraschenderweise funktioniert.

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

Es ist im Allgemeinen in Ordnung, mit der Ausnahme, dass es ausführlich ist, komisch aussieht und keine von Ruby-IDEs, von denen ich weiß, dass sie sie unterstützen (yep, ich kommentiere/kommentiere gerne mit einem Tastendruck).

Ich bin neugierig, gibt es einen "Offiziellen", der das in Schienen macht?

Vielen Dank!

105
Nikita Rybak

Ich würde nicht als Lösung zählen, aber vielleicht den Block zwischen einschließen

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

wenn Sie sich etwas schmutzig fühlen, erstellen Sie einen Helfer, der einfach nichts ausgibt.

Ich habe es nie gebraucht, aber ich bin gestolpert, dass es dafür scheinbar keine Lösung gibt.

108
Chubas

Verwenden Sie dies zum Kommentieren einzelner Zeilen:

<%# your_Ruby_code %>

Bei mehreren Zeilen die 

<% 
=begin %>  <% Ruby_code %>
<% 
=end %>

Was du gesagt hast, würde funktionieren.

151
Garfield

Der =begin-Ansatz ist ärgerlich, weil:

  1. Es funktioniert nicht für gemischtes HTML und Ruby (oder nur HTML), das sich in einer einzelnen Zeile befindet
  2. Es ist nervig zu tippen

Der <% if false %>-Ansatz funktioniert, aber er sieht komisch aus und gibt niemandem, der sich Ihren Code ansieht, einen Hinweis auf Ihre Absichten.

Meine Lösung lautet wie folgt:

Fügen Sie in application_helper.rb eine Methode hinzu:

def comment
end

Dann können Sie in Ihrer Ansichtsvorlage Folgendes sagen:

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

Dies funktioniert, da jede Ruby-Methode einen Block aufnehmen kann, der übergebene Block jedoch ignoriert wird, wenn Ihre Methode keine yield enthält.

23
sumizome
<%#=

...commented
multiline
block...

%>
7
Piotr Turek

Für Blockkommentare in Vorlagen findet mein Texteditor (Komodo) diese Variation auf @ Garfields Empfehlung am wenigsten unangenehm:

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

Da Sie <% %> verwenden können, um einen Ruby-Block einzufügen, kann er sicherlich dazu verwendet werden, Kommentare einzugeben.

Eine einfachere und elegantere Lösung würde aussehen ...

<%
# 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?
%>
7
Sagar Ranglani

Verwenden Sie zum Kommentieren von erb-Tags das Ruby-Kommentar-Hash-Symbol vor dem = -Zeichen im öffnenden Tag

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

Nach = begin müssen Sie%> nicht eingeben

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

Nur ein Nachtrag zu einigen der vorherigen Antworten. Die Lösung = begin/= end fand ich am nützlichsten, aber aus Gründen der Schönheit schreibe ich sie so:

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

Da bis zum =end alles ignoriert wird, ist es nicht erforderlich, das =begin-Tag mit %> zu schließen oder das =end-Tag mit <% zu öffnen (worauf auch in einer früheren Antwort hingewiesen wurde).

Ich habe festgestellt, dass dies die eleganteste Lösung ist, um einen Block aus gemischtem Ruby- und HTML-Code vollständig zu überlisten und ihn in meinem Editor ausgegraut zu haben, im Gegensatz zu der <% if false %>-Lösung. Der einzige Nachteil ist, dass =begin und =end ganz am Anfang der Zeile stehen müssen.

1
ViggoV

Sie müssen berücksichtigen, wo der Code ausgeführt wird. Ruby-artige Kommentare funktionieren, da der Ruby-Code auf dem Server ausgeführt wird, bevor er an den Webbrowser gesendet wird. Dies erklärt auch, warum HTML-Kommentare nicht funktionieren - der Ruby wurde bereits ausgeführt.

Unterstützt die von Ihnen verwendete IDE nicht die Erstellung benutzerdefinierter Makros zum Auskommentieren von Codeblöcken?

1
John Topley

Blockkommentar-Verknüpfung von Sublime Text ctrl+shift+/ stellt fest, ob Sie normales HTML oder ein Erb-Tag ausgewählt haben, und setzt entweder den <!--- oder den <% =begin %> entsprechend.

1
iono

Verwenden Sie einen HEREDOC-Kommentar

Pros:

  • Selbsterklärend, dass dies ein Kommentar ist
  • Funktioniert für erb- und HTML-Tags
  • Hat ok Syntax-Hervorhebung (als eine lange Zeichenfolge)

Nachteile:

  • Schräge 3-Zeilen-Schließsyntax
  • Keine Tastenkombinationen

Code:

Das Eröffnungs-Tag kann sein

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

oder

<%
<<-COMMENT
%>

Alles hier wird nicht im Browser ausgeführt oder angezeigt

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

Das schließende Tag

ja es muss 3 zeilen sein ???? . Ich weiß nicht warum das erb eröffnende tag wichtig ist, aber es ist! (sofern Sie keine erb-Tags im Kommentar verwendet haben).

<%      
COMMENT
%>
0
Arye Eidelman

Dies ist der einzige, der für mich gearbeitet hat. 

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

Sie können gleichzeitig <% if false%> und HTML-Kommentare verwenden:

<%if false%><--

stuff to comment out

--><%end%>

Die Vorteile sind:

  • Ruby-Code wird nicht ausgeführt

  • Der kommentierte Block hat in IDE eine graue Farbe

  • Die Absicht ist für andere Entwickler offensichtlich

0
stillwaiting