¿Cuál es la diferencia entre <%, <%=, <%# and - % > en ERB en Rails?
Puede alguien describir el uso de los siguientes caracteres que se utilizan en el archivo ERB:
<% %>
<%= %>
<% -%>
<%# %>
¿Cuál es el uso de cada uno ?
7 answers
<% %>
Ejecuta el código ruby entre corchetes.
<%= %>
Imprime algo en el archivo erb.
<% -%>
Evita el salto de línea después de la expresión.
<%# %>
Comenta el código entre corchetes; no se envía al cliente (a diferencia de los comentarios HTML).
Visite Ruby Doc para obtener más información sobre ERB.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-27 20:51:37
<% %>
y <%- and -%>
son para cualquier código Ruby, pero no generan los resultados (por ejemplo, sentencias if). los dos son iguales.
<%= %>
es para generar los resultados del código Ruby
<%# %>
es un comentario ERB
Aquí hay una buena guía: http://api.rubyonrails.org/classes/ActionView/Base.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-02 10:09:21
Rails utiliza no el ERB de stdlib por defecto, utiliza erubis. Fuentes: este comentario de dev, Gemspec de ActionView, acepté la solicitud de fusión que hice mientras escribía esto .
Hay diferencias de comportamiento entre ellos, en particular en cómo funcionan los operadores de guion %-
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 se puede utilizar -
- ERB: debe pasar
-
atrim_mode
opción deERB.new
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 se trata de una nueva línea.
-
Erubis:
En
<% %>
(sin=
),-
es inútil porque<% %>
y<% -%>
son lo mismo.<% %>
elimina la línea actual si solo contiene espacios en blanco, y no hace nada de lo contrario.-
{[27] {} En[17]} (con
=
):- elimine toda la línea si solo contiene espacios en blanco
- de lo contrario, si hay un no-espacio antes de la etiqueta, y solo whitesapces después, elimine los espacios en blanco que vienen después de
- de lo contrario, hay un no-espacio después de la etiqueta: do 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: elimina 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 use este.
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
Lo que %-
y -%
hacen juntos
La combinación exacta de ambos efectos por separado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:48
He agregado el delimitador literal de etiquetas <%%
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 gráfico.js tooltips, etc.
Todo sobre ERB se puede encontrar aquí: https://docs.puppet.com/puppet/latest/reference/lang_template_erb.html#tags
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-09 15:09:56
Estos se usan en ruby on rails :-
:-
Las etiquetas se utilizan para ejecutar código Ruby que no devuelve nada, como condiciones, bucles o bloques. Eg: -
<h1>Names of all the people</h1>
<% @people.each do |person| %>
Name: <%= person.name %><br>
<% end %>
:-
Use para mostrar el contenido .
Name: <%= person.name %><br>
:-
Rails extiende ERB, por lo que puede suprimir la nueva línea simplemente agregando un guion final a las etiquetas en las plantillas de Rails
:-
Comenta el código
<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-12 14:30:21
-
<% %>
: Ejecuta el código ruby -
<%= %>
: Imprime en el archivo Erb. O navegador -
<% -%>
: Evita el salto de línea después de la expresión. -
<%# %>
: Comentario ERB
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 05:31:35
<% %>
ejecuta el código allí pero no imprime el resultado, por ejemplo:
Podemos usarlo para if else en un archivo erb.
<% temp = 1 %>
<% if temp == 1%>
temp is 1
<% else %>
temp is not 1
<%end%>
Se imprimirá temp is 1
<%= %>
ejecuta el código y también imprime la salida, por ejemplo:
Podemos imprimir el valor de una variable rails.
<% temp = 1 %>
<%= temp %>
Se imprimirá 1
<% -%>
No hace ninguna diferencia ya que no imprime nada, -%>
solo tiene sentido con <%= -%>
, esto evitará un nuevo alinear.
<%# %>
comentará el código escrito dentro de esto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-15 10:21:03