2011-07-24 15 views
5

estoy usando el siguiente conjunto de código en mis dos puntos de vista y el gestor de correo:Rails 3: La entrada del usuario escapar trabajar de manera diferente en las vistas y anuncio publicitario

<%= simple_format(auto_link(h(user_input))) %> 

comienzo llamando html_safe (h) en el user_input , para escapar de cualquier código peligroso. Luego llamo auto_link para habilitar cualquier enlace en su entrada, y luego llamo a simple_format para habilitar saltos de línea y demás.

Esto funciona perfectamente en mi opinión, y debidamente muestra la siguiente, totalmente escapado, pero con un vínculo de trabajo:

" http://google.com " 

Sin embargo, cuando la misma exacta aparece en un correo electrónico ActionMailer, estoy viendo todos los caracteres especiales, incluyendo mi autolink, doblemente escapado (el &amp;quot;, por ejemplo, no se muestra correctamente como resultado):

&amp;quot; &lt;a href=3D&quot;http://google.com&quot;&gt;http://google.=com&lt;/a&gt; &amp;quot; 

por alguna razón, tengo que volver a marcar como html_safe de nuevo para obtener funciona:

<%= simple_format(auto_link(h(user_input))).html_safe %> 
Este

correctamente salidas:

&quot; <a href=3D"http://google.com">http://google.com</a> &quot; 

¿Alguna idea sobre qué ActionView y ActionMailer tratan el mismo código de manera diferente?

+0

@mu es demasiado corto Mi archivo de plantilla de correo electrónico se llama notify.html.erb –

Respuesta

6

Si llama a simple_format desde la plantilla de correo electrónico (para renderizar saltos de línea), el comportamiento que obtiene es terriblemente inusual, y resulta que esta ayuda se sobrescribe con un método privado.

De todas formas, puede acceder a simple_format en la plantilla de correo electrónico mediante el uso de este truco:

ApplicationController.helpers.simple_format() 

Esperemos que en otros carriles de liberar este problema se solucionará.

+0

¡Esto es algo tan sutil! Gracias por la solución :) –

Cuestiones relacionadas