2010-06-27 19 views
98

¿Cómo se comenta el html mezclado con el código ruby?Bloquear comentarios en plantillas html.erb en rieles

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

en JSP es realmente simple: <%-- ... --%>, pero soy incapaz de encontrar ninguna opción conciso en rieles.

Comentarios html simples <!-- ... --> no funcionan: el código de ruby ​​todavía se ejecuta y grita errores.

Hay una opción para usar if false con comentarios html, pero es bastante detallado, sin mencionar que IDEs no lo admite.

También hay una opción proveniente del rubí puro, que sorprendentemente funciona.

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

Por lo general bien, excepto que es prolijo, de aspecto extraño, y ninguno de los entornos de desarrollo de rubí que conozco lo apoyan (sí, me gusta hacer comentarios/observaciones de salida con sólo presionar una tecla).

Tengo curiosidad, ¿hay algún 'oficial' de hacer esto en los rieles?

Gracias!

Respuesta

99

yo no contaría como una solución, pero quizás que encierra el trozo entre un

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

o si se siente un poco sucio, crear un ayudante que simplemente da salida a nada.

Nunca lo he necesitado, pero me parece que no parece haber una solución lista para usar.

+20

Lo sentimos, debe usar el símbolo # para la etiqueta erb de apertura <%# %> o <%#= %> – jamesc

1

Debe tener en cuenta dónde se ejecuta el código. Los comentarios de estilo Ruby funcionan porque el código de Ruby se ejecuta en el servidor antes de ser servido en el navegador web. Esto también explica por qué los comentarios HTML no funcionan — Ruby ya se ha ejecutado.

¿El IDE que está utilizando no admite la creación de macros personalizadas para comentar bloques de código?

+0

1) tienes razón, los comentarios de jsp tienen un formato ligeramente diferente, actualicé la publicación. 2) No puedo encontrar nada parecido en IDEA o Netbeans. ¿Tenías algo en particular con IDE en mente diciendo esto? –

+1

No, no lo hice. Personalmente, no uso un IDE para proyectos de Rails. –

136

Uso esto para comentar las líneas individuales:

<%# your_ruby_code %> 

Para múltiples líneas, la

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

Lo que dijo iba a funcionar.

+2

sé que lo haría, me interesa si hay algo más simple :) –

+2

= comienzan Creo que el inicio - final sería todo = fin # Se pueden ignorar mi comentario como su totalidad comentado: P – Garfield

+1

Doesn' t trabajo mezclado con etiquetas de ruby ​​open dentro y html – Gediminas

6

para comentar las etiquetas erb utilizan el símbolo de hash comentario rubí antes del signo = en la etiqueta de apertura

<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> 
--> 
+0

Por lo que tengo entendido, está buscando una solución de comentarios de líneas múltiples: si tengo un bloque de n líneas, solo quiero poder agrega una línea en la parte superior e inferior (o tal vez un par) y haz que funcione. No quiero tener que editar todo el bloque. – dionyziz

1

de Sublime Text bloque de comentario acceso directo Ctrl + Shift +/ avisos si ha seleccionado HTML normal o una etiqueta Erb y coloca el <!--- o <% =begin %> en consecuencia.

+0

Sí, pero aún así no comentará tanto el HTML * como el rubí. – Adamantish

+0

Hmm ... parece una buena causa para un complemento personalizado. Tal vez como un recurso provisional, puede presionar 'ctrl + d' para seleccionar varias veces el inicio de cada etiqueta Erb' <% 'dentro del bloque y luego presionar' ctrl + shift +/', luego golpearlo una vez más para que todo el bloque comentar el HTML. – iono

7

Para los comentarios de bloque en plantillas, mi editor de texto (Komodo) encuentra esta variación en @Garfield's recommendation menos desagradable:

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

...commented 
multiline 
block... 

%> 
20

El enfoque es molesto porque:

  1. Doesn' t trabajo para HTML mixta y Ruby (o simplemente HTML) que está en una sola línea
  2. es molesto para escribir

El enfoque <% if false %> funciona, pero se ve raro y no le da a nadie más que vea tu código una pista sobre tus intenciones.

Mi solución es la siguiente:

En application_helper.rb, añadir un método así:

def comment 
end 

Luego, en su plantilla de vista, se puede decir:

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

Esto funciona porque cualquier El método Ruby puede tomar un bloque, pero ignorará silenciosamente el bloque pasado si su método no incluye un yield.

+2

Incluso puedes escribirlo como <% comment do%> ... <% comment end%>. Agregué esta sintaxis a un texto sublime para que incluso parezca un comentario real. –

8

Ya que se puede utilizar <% %> poner un bloque de rubí, que puede ser utilizado sin duda a poner en los comentarios en él.

Una solución más simple y elegante se vería así ...

<% 
# 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? 
%> 
+3

Esto no funciona. Cualquier etiqueta de rubí dentro del comentario de bloque cerrará el bloque externo. – Hovis

0

Este es el onlyone que trabajó para mí.

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

3

Después = comienzan que no es necesario poner%>

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

La única solución aceptable que he encontrado a este problema agotador era poner un espacio dentro de la "<% =" para que ya no se registra como código de rubí, y luego comente todo el bloque con comentarios hTML

De esta manera:

<!-- 
<p> 
    < %= @some_object.some_attribute %> 
</p> 
<p> 
    < %= @some_object.another_attribute %> 
</p> 
<p> 
    < %= @some_object.some_attribute %> 
</p> 
<p> 
    < %= @some_object.some_attribute %> 
</p> 
--> 

Sí, agregar los espacios es molesto. Pero es la menos molesta de todas las soluciones que he visto hasta ahora.

+1

También podría agregar un '#' ... en lugar de enviar ruby ​​en el documento. – max

+0

@max Eso causa un error de sintaxis – ineedahero