2010-09-27 14 views
7

Siempre utilicé <%= some_code %> para insertar Ruby en HTML cuando uso Ruby on Rails. Me acabo de dar cuenta de que otros proyectos a veces usan <%= some_code -%>.Qué significa -%> en Ruby on Rails, en comparación con%>

+0

pregunta Superserie para todos los formatos '' <% %> modificadores que vino después: http://stackoverflow.com/questions/7996695/rails-erb-syntax –

+0

@CiroSantilli: Usted' re dominando estos - buen trabajo! Escogí http://stackoverflow.com/questions/7996695/what-is-the-difference-between-and-in-erb-in-rails para este, también ... –

Respuesta

13

<% = some_code -%> El signo menos al final quita la nueva línea. Útil para formatear el HTML generado, mientras que <% = some_code%> no lo hace.

Gracias, Anubhaw

+0

¿Qué hay de la diferencia entre comenzar con ' <% = 'vs' <% '? – Shawn

+0

@ShawnSep '=' addes la salida, '%' no y se usa para cosas como condicionales '<% if %>'. –

4

Se elimina on Rails 3.

Ahora con Rails 3, no hay diferencia entre estos 2 formas.

+0

No estoy seguro de dónde lo lee, pero -%> todavía impide que ERB produzca una nueva línea en los rieles 3. – Samuel

+0

Según las notas de la versión de Rails 3: "Ya no es necesario colocar un signo menos al final de una interpolación ruby dentro de una plantilla ERb para eliminar el retorno del carro posterior en el resultado HTML ". –

+1

@Tim Eso significa que eliminará el CR final de su salida de HTML, no de todas las líneas. -%> todavía existe y sigue siendo útil. – Samuel

1

Esta respuesta era incorrecta: vea https://stackoverflow.com/a/25617607/895245 en su lugar.


en Ruby 2,1 (no necesariamente con rieles), el - elimina uno el salto de línea como se ha señalado por Anubhaw:

  • el salto de línea debe ser el primer carácter después de la >
  • sin espacios son eliminado
  • un solo salto de línea se elimina
  • que debe pasar el '-' opción de 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 parece: