Bloquer les commentaires en html.modèles erb dans rails
Comment commentez-vous html mélangé avec du code ruby?
some text <% ... %> more text <%= ... %>
something else
<% ... %>
Dans jsp c'est très simple: <%-- ... --%>
, mais je suis incapable de trouver une option concise dans rails.
Les commentaires html simples <!-- ... -->
ne fonctionnent pas: le code ruby est toujours exécuté et crie des erreurs.
Il y a une option à utiliser if false
avec des commentaires html, mais c'est assez verbeux, sans parler de IDEs ne le supporte pas.
Il y a aussi une option venant de pure ruby, qui fonctionne étonnamment.
<%
=begin %>
... html and ruby code goes here
<%
=end %>
C'est généralement bien, sauf que c'est verbeux, bizarre et qu'aucun des IDE ruby que je connais ne le supporte (Oui, j'aime Commenter/commenter avec une frappe).
Je suis curieux, y a-t-il un "officiel" de le faire dans rails?
Merci!
15 réponses
Je ne compterais pas comme une solution, mais peut-être enfermer le morceau entre un
<% if false %>
...
<% end %>
Ou si vous vous sentez un peu sale, créez un assistant qui ne génère simplement rien.
Je n'en ai jamais eu besoin, mais je suis trébuché il ne semble pas y avoir de solution prête à l'emploi pour cela.
Utilisez ceci pour commenter des lignes simples:
<%# your_ruby_code %>
Pour plusieurs lignes, le
<%
=begin %> <% ruby_code %>
<%
=end %>
Ce que vous avez dit fonctionnerait.
L'approche =begin
est agaçante car:
- cela ne fonctionne pas pour le HTML mixte et Ruby (ou juste HTML) qui est sur une seule ligne
- c'est ennuyeux de taper
L'approche <% if false %>
fonctionne, mais elle a l'air bizarre et ne donne à personne d'autre qui regarde votre code un indice sur vos intentions.
Ma solution est la suivante:
Dans application_helper.rb
, ajoutez une méthode donc:
def comment
end
Ensuite, dans votre modèle de vue, vous pouvez dire:
<% comment do %>Some stuff that won't be rendered...<% end %>
Cela fonctionne parce que tout La méthode Ruby peut prendre un bloc, mais ignorera silencieusement le bloc passé si votre méthode n'inclut pas de yield
.
Puisque vous pouvez utiliser <% %>
pour mettre un bloc ruby, il peut certainement être utilisé pour y mettre des commentaires.
Une solution plus simple et élégante ressemblerait...
<%
# 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?
%>
Commenter erb tags utilisez le rubis commentaire dièse avant le signe = dans la balise d'ouverture
<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>
-->
Après =commencer, vous n'avez pas besoin de mettre des %>
<%
=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 %>
Vous devez garder à l'esprit où le code est exécuté. Les commentaires de style Ruby fonctionnent car le code Ruby est exécuté sur le serveur avant d'être servi au navigateur web. Cela explique également pourquoi les commentaires HTML ne fonctionnent pas-le Ruby a déjà été exécuté.
L'IDE que vous utilisez ne prend-il pas en charge la création de macros personnalisées pour commenter des blocs de code?
Le raccourci de commentaire de bloc de Sublime Text ctrl + shift + / Remarque Si vous avez sélectionné HTML normal ou une balise Erb et place le <!---
ou <%
=begin %>
en conséquence.
C'est le seul qui a fonctionné pour moi.
<%
=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 %>
Juste un addendum à certaines des réponses précédentes. J'ai trouvé la solution =begin/=end la plus utile, mais par souci de beauté je l'écris comme ceci:
<%
=begin
<p>HTML will be ignored</p>
<%= 'and so will ruby' %>
<p>
<%= 'plus the whole block will be greyed in editor' %>
</p>
=end
%>
Notez que puisque tout est ignoré jusqu'à ce que le =end
il n'est pas nécessaire de fermer le =begin
balise %>
ou ouvrir la =end
balise <%
(qui a également été souligné dans une précédente réponse)
J'ai trouvé que c'était la solution la plus élégante pour surpasser complètement un bloc de code Ruby et html mixte et l'avoir grisé dans mon éditeur aussi, par opposition à la solution <% if false %>
. Seul inconvénient, c'est que =begin
et =end
doivent être placés au début de la ligne..
Vous pouvez utiliser à la fois et les commentaires HTML en même temps:
<%if false%><--
stuff to comment out
--><%end%>
Les avantages sont:
-
Le code Ruby n'est pas exécuté
-
Le bloc commenté a une couleur grise dans IDE
L'intention est évidente pour les autres développeurs
Utilisez un HEREDOC appelé comment
Avantages:
- Soi que ceci est un commentaire
- fonctionne pour les balises erb et HTML
- a une coloration syntaxique correcte (comme une longue chaîne)
Inconvénients:
- étrange syntaxe de fermeture de 3 lignes
- Pas de raccourcis clavier
Code:
La balise d'ouverture peut être
<% <<-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
Ou
<%
<<-COMMENT
%>
Quelque chose ici ne s'exécutera pas ou n'apparaîtra pas dans le navigateur
<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?
La fermeture étiquette
Oui, il doit y avoir 3 lignes . Je ne sais pas pourquoi la balise ERB d'ouverture est importante mais elle l'est! (sauf si vous n'avez pas utilisé de balises erb dans le commentaire).
<%
COMMENT
%>
La seule solution acceptable que j'ai jamais trouvée à ce problème de rupture était de mettre un espace dans le "
Comme ceci:
<!--
<p>
< %= @some_object.some_attribute %>
</p>
<p>
< %= @some_object.another_attribute %>
</p>
<p>
< %= @some_object.some_attribute %>
</p>
<p>
< %= @some_object.some_attribute %>
</p>
-->
Oui, ajouter les espaces est ennuyeux. Mais c'est la moins ennuyeuse de toutes les solutions que j'ai encore vues.