2012-01-25 8 views
6

tengo método de prueba en ayudantes/archivo application_helper.rb:Diferencia entre <% ... %> y <%= .. %> en los carriles 3

def test 
    concat("Hello world") 
end 

Luego, en index.html.erb llamo como:

Blah 
<% test %> 

El visualización del navegador:

Bla Hola mundo

Es normalmente, pero si cambio

<%= test %> 

la pantalla del navegador:

Bla Hola worldBlah Hola mundo

Se duplicar todos de la página. No sé por qué? ¿Qué diferencia hay entre ellos? ¡Gracias por su ayuda!

+1

¿Hay alguna razón específica por la que esté usando 'concat'? –

Respuesta

10

De the Rails docs, concat solo se supone que debe usarse dentro de un bloque de código <% %>. Cuando lo utiliza en un bloque de código <%= %>, lo ve dos veces porque concat agrega el texto provisto al búfer de salida, pero luego también devuelve todo el búfer de salida a su método auxiliar, que luego es generado por <%=, causando su toda la página para ser duplicada.

Normalmente, no debería necesitar usar concat en todo caso (nunca me he encontrado con una situación en la que lo necesitaba). En su ayudante, sólo puede hacer esto:

def test 
    "Hello world" 
end 

y luego usar <%= test %> en su opinión.

+0

Bien jugado, señor. –

+0

Gracias Dylan Markow, ¿me puede mostrar <% %> y <%= %> se utilizan en qué caso? Uso mucho concat en mi método de ayuda, ¿es bueno? Si no, ¿cómo resolverlo? (Yo uso concat para escribir la etiqueta html en el método de ayuda) – banhbaochay

13

Normalmente, un <%%> es un fragmento de código de Rails (es decir, iniciar un condicional, finalizar un condicional, etc.), mientras que <% =%> evalúa una expresión y devuelve un valor a la página.

9

¿Cuál es la diferencia?

<% %> Vamos a evaluar el código de rieles en su opinión

<%= %> de le permiten evaluar el código de rieles en su opinión e imprime el resultado en la página

Ejemplo # 1: La igualdad signo es análogo a "puts" entonces:

<%= "Hello %> 

...es lo mismo que:

<% puts "Hello" %> 

Ejemplo # 2:

<% if !user_signed_in? %> 
    <%= "This text shows up on the page" %> 
<% end %> 

#returns "This text shows up on the page" if the user is signed in 
+0

Estaba buscando <%- -%>. ¿Sabes por casualidad qué hace? – serengeti12

-1

ver esto:

<%= You need to do this %> 
<% You shouldn't do this %> 
4

Es igual que este

<% execute this code and display nothing %> 

y

<%= execute this code and display the result in the view %> 
Cuestiones relacionadas