web-dev-qa-db-fra.com

Bloquer les commentaires dans les modèles html.erb dans les rails

Comment commentez-vous le code HTML mélangé avec le code Ruby?

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

Dans jsp c'est très simple: <%-- ... --%>, mais je ne parviens pas à trouver d'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 pour utiliser if false avec des commentaires HTML, mais c'est assez détaillé, pour ne pas dire que les IDE ne le supportent pas.

Il y a aussi une option venant du pur Ruby, qui fonctionne étonnamment.

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

Il est généralement bon, sauf qu'il est prolixe, bizarre et qu'aucun des IDEs Ruby que je connaisse ne le supporte (oui, j'aime commenter/commenter avec une frappe).

Je suis curieux, y a-t-il un «officiel» pour faire cela dans des rails?

Merci!

105
Nikita Rybak

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

Je n'en ai jamais eu besoin, mais je suis tombé sur une panne, il semble n'y avoir aucune solution prête à l'emploi pour cela.

108
Chubas

Utilisez ceci pour commenter des lignes simples:

<%# your_Ruby_code %>

Pour plusieurs lignes, le 

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

Ce que vous avez dit fonctionnerait.

151
Garfield

L’approche =begin est agaçante parce que:

  1. Cela ne fonctionne pas pour HTML et Ruby mixtes (ou simplement HTML) sur une seule ligne
  2. 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 de vos intentions.

Ma solution est la suivante:

Dans application_helper.rb, ajoutez une méthode pour:

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 n'importe quelle méthode Ruby peut prendre un bloc, mais ignorera en silence le bloc transmis si votre méthode n'inclut pas yield.

23
sumizome
<%#=

...commented
multiline
block...

%>
7
Piotr Turek

Pour les commentaires de bloc dans les modèles, mon éditeur de texte (Komodo) trouve cette variation dans la recommandation de @ Garfield moins odieuse:

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

Puisque vous pouvez utiliser <% %> pour mettre un bloc Ruby, il peut certainement être utilisé pour y ajouter 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?
%>
7
Sagar Ranglani

Pour commenter les balises erb, utilisez le symbole de hachage des commentaires Ruby 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>
-->
6
jamesc

Après = commencer, vous n'avez pas besoin de mettre%>

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

Juste un addenda à certaines des réponses précédentes. J'ai trouvé la solution = begin/= end la plus utile, mais pour des raisons 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'au =end, il n'est pas nécessaire de fermer la balise =begin avec %> ou d'ouvrir la balise =end avec <% (ce qui a également été souligné dans une réponse précédente).

J'ai trouvé que c'était la solution la plus élégante pour supprimer complètement un bloc de code Ruby et HTML mixte et le rendre grisé dans mon éditeur également, par opposition à la solution <% if false %>. Le seul inconvénient est que =begin et =end doivent être placés au tout début de la ligne.

1
ViggoV

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 transmis au navigateur Web. Cela explique également pourquoi les commentaires HTML ne fonctionnent pas - le Ruby a déjà été exécuté.

IDE que vous utilisez ne permet-il pas de créer des macros personnalisées pour commenter des blocs de code?

1
John Topley

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 le <% =begin %> en conséquence.

1
iono

Utilisez un commentaire appelé HEREDOC

Avantages:

  • Cela va de soi que c'est un commentaire
  • Fonctionne pour les tags erb et HTML
  • La coloration syntaxique est correcte (en tant que chaîne longue)

Les inconvénients:

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

Tout ce qui se trouve ici ne fonctionnera 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 balise de fermeture

oui ça doit être 3 lignes ???? . Je ne sais pas pourquoi le tag d'ouverture erb est important mais c'est le cas (sauf si vous n'avez pas utilisé de tags erb dans le commentaire).

<%      
COMMENT
%>
0
Arye Eidelman

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

0
Platon

Vous pouvez utiliser simultanément les commentaires <% if false%> et HTML:

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

0
stillwaiting