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ónERB.new
deERB.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