2010-09-30 2 views
6

Je rencontre un problème lors de l'utilisation d'une méthode d'assistance personnalisée dans mon application Rails (3.0) pour générer le code html requis.Rails Afficher Helper n'insérant pas de code HTML dans la page

je l'appel suivant à mon avis partielle: _label.html.erb

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

Et dans le fichier 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 

La sortie est prévue:

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

* accordé, sans le formatage, et le 15 est arbitraire

Si j'utilise le <% = ...%> lors de l'appel de la méthode, il va sortir la chaîne correctement, mais ce ne sera pas html (ie je verrai "<tr><td>Diamond </td><td>15%</td></tr>" par opposition à "Diamond 15 % ")

Que fais-je incorrectement?

+0

Principale raison pour laquelle il n'est pas l'impression est parce que vous utilisez '' <% %> au lieu de '' <%= %> – klew

+0

Si j'utilisais <%=...%>, la chaîne serait sortie, mais ce serait la chaîne actuelle (comme c'est le comportement par défaut des rails maintenant - pour empêcher XSS et d'autres types de failles de sécurité qui pourraient survenir) – MunkiPhD

Répondre

7

Vous devez marquer la chaîne retournée comme « raw » puis utilisez <% =%>

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

Je viens de migrer une application vers Rails 3 , et je voudrais demander: c'est un nouveau comportement dans la façon dont Rails 3 traite les chaînes HTML Safe, correct? – Robbie

+0

@Robbie - Je le crois - donc pourquoi j'ai eu ce problème (mais je ne savais pas comment le corriger.) Merci pour l'aide Rob! – MunkiPhD

+0

Oui, c'est la nouvelle façon dont les rails rend le texte. <%= .. %> est échappé et vous devez utiliser raw() si vous avez du html qui doit être affiché – danengle

Questions connexes