2010-09-30 30 views
6

Tengo un problema al utilizar un método de ayuda personalizado en mi aplicación Rails (3.0) para generar el html requerido.Rails View Helper No insertar HTML en la página

tengo la siguiente llamada en mi vista parcial: _label.html.erb

<% display_resource "Diamond", @resource.diamond %> 

Y en el archivo resource_helper.rb:

module ResourceHelper 
    def display_resource(display_name, value) 
     "<tr><td>#{display_name} </td><td>#{value.to_s}%</td></tr>" if value > 0 
    end 
end 

El resultado previsto es:

<tr> 
    <td>Diamond</td> 
    <td>15%</td> 
<tr> 

* concedido, sin el formato, y el 15 es arbitrario

Si utilizo el <% = ...%> al realizar la llamada al método, se mostrará la cadena correctamente, pero no será html (es decir, veré "<tr><td>Diamond </td><td>15%</td></tr>" en lugar de "Diamante 15" % ")

¿Qué estoy haciendo incorrectamente?

+0

La razón principal por la que no es la impresión se debe a que utiliza '' <% %> en lugar de '' <%= %> – klew

+0

Si usaba <%=...%>, saldría la cadena, pero sería la cadena real (ya que ese es el comportamiento predeterminado de los rieles ahora, para evitar XSS y otros tipos de agujeros de seguridad que puedan surgir) – MunkiPhD

Respuesta

7

Usted necesidad de marcar la cadena devuelta como "raw" y luego usar <% =%>

module ResourceHelper 
    def display_resource(display_name, value) 
     raw("<tr><td>#{display_name} </td><td>#{value.to_s}%</td></tr>") if value > 0 # string wrapped in raw 
    end 
end 
+0

Acabo de migrar una aplicación a Rails 3 , y me gustaría preguntar: este es un nuevo comportamiento en cómo Rails 3 trata las cadenas HTML Safe, ¿correcto? – Robbie

+0

@Robbie - Creo que sí - por eso tuve este problema (pero no sabía cómo rectificarlo. Gracias por la ayuda Rob! – MunkiPhD

+0

Sí, esta es la nueva forma en que los rieles representan el texto. De forma predeterminada, todo el texto se representa entre <%= .. %> se escapó y necesita usar raw() si tiene algún html que necesita mostrarse – danengle

Cuestiones relacionadas