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!

102
demandé sur Nikita Rybak 2010-06-27 18:21:21

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.

104
répondu Chubas 2011-07-23 16:14:01

Utilisez ceci pour commenter des lignes simples:

<%# your_ruby_code %>

Pour plusieurs lignes, le

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

Ce que vous avez dit fonctionnerait.

147
répondu Garfield 2010-06-27 16:53:42

L'approche =begin est agaçante car:

  1. cela ne fonctionne pas pour le HTML mixte et Ruby (ou juste HTML) qui est 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 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.

21
répondu sumizome 2014-06-10 00:29:01

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?
%>
8
répondu Sagar Ranglani 2014-08-30 12:20:12

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

<%# A long multiline comment in a rails template ...
  # line 2
  # and so on ... 
  # %>
7
répondu klenwell 2017-05-23 11:47:29
<%#=

...commented
multiline
block...

%>
7
répondu Piotr Turek 2014-06-09 10:07:03

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>
-->
6
répondu jamesw 2011-07-23 16:34:19

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 %>
4
répondu Michal 2016-02-15 13:39:02

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?

1
répondu John Topley 2010-06-27 16:02:20

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.

1
répondu iono 2012-12-11 21:46:54

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
répondu Platon 2016-02-08 13:38:17

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

0
répondu ViggoV 2018-05-22 13:00:43

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

0
répondu stillwaiting 2018-05-23 23:08:37

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
%>
0
répondu Arye Dov Eidelman 2018-07-08 21:59:27

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.

-4
répondu ineedahero 2016-11-03 20:15:56