ruby on rails - software - Diferencia entre-%> y%> en rieles
ruby on rails tutorial (4)
Esta pregunta ya tiene una respuesta aquí:
Empecé algunos tutoriales de rieles y noté que algunos de los bloques de código de vista son como
<h1><%= @subject.name -%></h1>
y otros bloques de código son como
<h1><%= @subject.name %></h1>
Cuál es la diferencia entre -%> y%>
Si conoces algunas buenas referencias de sintaxis a las que me puedes dirigir, eso también sería útil.
ACTUALIZACIÓN: Esta respuesta fue incorrecta; en su lugar, consulte https://.com/a/25626629/895245 .
En Ruby 2.1 (no necesariamente con Rails), el -
elimina una nueva línea final:
- la nueva línea debe ser el primer char después de la
>
- no se eliminan espacios
- solo se elimina una nueva línea
- debe pasar la opción
''-''
para usarlo
Ejemplos:
require ''erb''
ERB.new("<%= ''a'' %>/nb").result == "a/nb" or raise
begin ERB.new("<%= ''a'' -%>/nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= ''a'' %>/nb" , nil, ''-'').result == "a/nb" or raise
ERB.new("<%= ''a'' -%>/nb" , nil, ''-'').result == ''ab'' or raise
ERB.new("<%= ''a'' -%> /nb" , nil, ''-'').result == "a /nb" or raise
ERB.new("<%= ''a'' -%>/n b" , nil, ''-'').result == ''a b'' or raise
ERB.new("<%= ''a'' -%>/n/nb", nil, ''-'').result == "a/nb" or raise
Doc: http://ruby-doc.org/stdlib-2.1.1/libdoc/erb/rdoc/ERB.html
Rails 4.1 documenta esto en http://api.rubyonrails.org/classes/ActionView/Base.html , y parece que:
utilice ERB de forma predeterminada en: https://github.com/rails/rails/blob/fcbdac7e82725c388bf5adf56a9a9a16d4efdbe0/actionview/lib/action_view/template/handlers.rb#L10
establecer
-
de forma predeterminada en: https://github.com/rails/rails/blob/fcbdac7e82725c388bf5adf56a9a9a16d4efdbe0/actionview/lib/action_view/template/handlers/erb.rb#L77
Sin embargo, Rails 4.1 elimina los espacios en blanco posteriores como está documentado, mientras que ERB puro no lo hace, por lo que puede haber otras diferencias.
Además, no está eliminando las nuevas líneas principales según lo documentado: podría ser un error de documentación. Se abrió un problema en: https://github.com/rails/rails/issues/16766
El guión adicional hace que ERB no muestre la nueva línea después de la etiqueta de cierre. No hay diferencia en su ejemplo, pero si tiene algo como esto:
<div>
<% if true -%>
Hi
<% end -%>
</div>
Producirá:
<div>
Hi
</div>
y no esto:
<div>
Hi
</div>
Estoy bastante seguro -
antes de %>
ya no es necesario, y debería dejarse fuera.
Al menos en Chrome, el html generado se ve igual usando -%>
o %>
.
Si usa HAML en lugar de ERB, puede hacer algo similar con un símbolo menor o mayor que después de su etiqueta.
>
eliminará cualquier espacio en blanco alrededor de su etiqueta y <
eliminará cualquier espacio en blanco dentro de ella.
.float-left<
%p
Lorem ipsum dolor sit amet
está compilado para:
<div class="float-left"><p>
Lorem ipsum dolor sit amet
</p></div>
Y…
%left_tag
%inside>
%right_tag
está compilado para:
<left_tag /><inside /><right_tag />
Si no estás usando HAML, definitivamente vale la pena echarle un vistazo.