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!
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.
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.
Der =begin
-Ansatz ist ärgerlich, weil:
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.
<%#=
...commented
multiline
block...
%>
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 ...
# %>
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?
%>
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>
-->
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 %>
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.
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?
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.
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
%>
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 %>
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