with rails from form ruby-on-rails ruby templates erb

ruby on rails - from - ¿Cuál es la diferencia entre<%,<%=,<%#y-%> en ERB en Rails?



render rails (7)

¿Puede alguien describir el uso de los siguientes caracteres que se utilizan en el archivo ERB?

<% %> <%= %> <% -%> <%# %>

¿Cuál es el uso de cada uno?


He agregado el delimitador de etiqueta literal <%% como respuesta a esto debido a su oscuridad. Esto le dirá a erb que no interprete la parte <% de la etiqueta que es necesaria para aplicaciones js como mostrar información sobre herramientas chart.js, etc.

Todo sobre ERB se puede encontrar aquí: https://docs.puppet.com/puppet/latest/reference/lang_template_erb.html#tags


Rails no usa el ERB de stdlib por defecto, usa erubis . Fuentes: github.com/rails/rails/issues/16766#issuecomment-54148778 , la gemspec de ActionView , aceptó la solicitud de fusión que hice al escribir esto .

Existen diferencias de comportamiento entre ellos, en particular sobre cómo funcionan los operadores de guión %- y -% .

La documentación es escasa. ¿Dónde se define "oficialmente" el formato ERB de Ruby? así que lo que sigue son conclusiones empíricas.

Todas las pruebas suponen:

require ''erb'' require ''erubis''

Cuando puedes usar -

  • ERB: debe pasar - a la opción ERB.new de ERB.new para usarlo.
  • erubis: habilitado por defecto.

Ejemplos:

begin ERB.new("<%= ''a'' -%>/nb").result; rescue SyntaxError ; else raise; end ERB.new("<%= ''a'' -%>/nb" , nil, ''-'') .result == ''ab'' or raise Erubis::Eruby.new("<%= ''a'' -%> /n b").result == ''a b'' or raise

Qué -% hace:

  • ERB: elimina el siguiente carácter si es una nueva línea.

  • erubis

    • en <% %> (sin = ), - es inútil porque <% %> y <% -%> son iguales. <% %> %% <% %> elimina la línea actual si solo contiene espacios en blanco, y no hace nada de lo contrario.

    • en <%= -%> (con = ):

      • eliminar la línea completa si solo contiene espacios en blanco
      • de lo contrario, si hay un espacio no antes de la etiqueta, y solo los espacios en blanco después, elimina los espacios en blanco que vienen después
      • de lo contrario, no hay espacio después de la etiqueta: no hacer nada

Ejemplos:

# Remove ERB.new("a /nb <% 0 -%>/n c", nil, ''-'').result == "a /nb c" or raise # Don''t do anything: not followed by newline, but by space: ERB.new("a/n<% 0 -%> /nc", nil, ''-'').result == "a/nb /nc" or raise # Remove the current line because only whitesapaces: Erubis::Eruby.new(" <% 0 %> /nb").result == ''b'' or raise # Same as above, thus useless because longer. Erubis::Eruby.new(" <% 0 -%> /nb").result == ''b'' or raise # Don''t do anything because line not empty. Erubis::Eruby.new("a <% 0 %> /nb").result == "a /nb" or raise Erubis::Eruby.new(" <% 0 %> a/nb").result == " a/nb" or raise Erubis::Eruby.new(" <% 0 -%> a/nb").result == " a/nb" or raise # Don''t remove the current line because of `=`: Erubis::Eruby.new(" <%= 0 %> /nb").result == " 0 /nb" or raise # Remove the current line even with `=`: Erubis::Eruby.new(" <%= 0 -%> /nb").result == " 0b" or raise # Remove forward only because of `-` and non space before: Erubis::Eruby.new("a <%= 0 -%> /nb").result == "a 0b" or raise # Don''t do anything because non-whitespace forward: Erubis::Eruby.new(" <%= 0 -%> a/nb").result == " 0 a/nb" or raise

¿Qué %- hace?

  • ERB: elimine los espacios en blanco antes de la etiqueta y después de las nuevas líneas anteriores, pero solo si solo hay espacios en blanco antes.

  • erubis: inútil porque <%- %> es lo mismo que <% %> %% <% %> (sin = ), y esto no se puede usar con = que es el único caso donde -% puede ser útil. Así que nunca uses esto.

Ejemplos:

# Remove ERB.new("a /n <%- 0 %> b/n c", nil, ''-'').result == "a /n b/n c" or raise # b is not whitespace: do nothing: ERB.new("a /nb <%- 0 %> c/n d", nil, ''-'').result == "a /nb c/n d" or raise

Qué %- y -% hacen juntos

La combinación exacta de ambos efectos por separado.


<% %> %% <% %> ejecuta el código allí pero no imprime el resultado, por ejemplo:
Podemos usarlo para más información en un archivo erb.

<% temp = 1 %> <% if temp == 1%> temp is 1 <% else %> temp is not 1 <%end%>

Imprimirá la temp is 1

<%= %> ejecuta el código y también imprime la salida, por ejemplo:
Podemos imprimir el valor de una variable de rieles.

<% temp = 1 %> <%= temp %>

Imprimirá 1

<% -%> No hace ninguna diferencia ya que no imprime nada, -%> solo tiene sentido con <%= -%> , esto evitará una nueva línea.

<%# %> comentará el código escrito en esto.


<% %> y <%- and -%> son para cualquier código Ruby, pero no muestran los resultados (p. ej., declaraciones). los dos son iguales

<%= %> es para generar los resultados del código Ruby

<%# %> es un comentario de ERB

Aquí hay una buena guía: http://api.rubyonrails.org/classes/ActionView/Base.html


Estos son de uso en rubí sobre rieles : -

<%%>: -

Las etiquetas <%%> se utilizan para ejecutar código Ruby que no devuelve nada, como condiciones, bucles o bloques. P.ej :-

<h1>Names of all the people</h1> <% @people.each do |person| %> Name: <%= person.name %><br> <% end %>

<% =%>: -

utilizar para mostrar el contenido.

Name: <%= person.name %><br>

<% -%>: -

Rails extiende ERB, para que pueda suprimir la nueva línea simplemente agregando un guión final a las etiquetas en las plantillas de Rails

<% #%>: -

comenta el código

<%# WRONG %> Hi, Mr. <% puts "Frodo" %>


<% %>

Ejecuta el código ruby ​​entre paréntesis.

<%= %>

Imprime algo en un archivo erb.

<% -%>

Evita el salto de línea después de la expresión.

<%# %>

Comentarios fuera del código entre paréntesis; no enviado al cliente (a diferencia de los comentarios HTML).

Visita Ruby Doc para obtener más información sobre ERB.


  • <% %> %% <% %> : Ejecuta el código ruby
  • <%= %> : Se imprime en un archivo Erb. O navegador
  • <% -%> : evita el salto de línea después de la expresión.
  • <%# %> : Comentario de ERB