Dans une application Rails 3, j'ai une classe de domaine où un attribut stocke du contenu HTML pur (c'est une application de blog, la classe de domaine est Post)).
Dans les modèles ERB, je dois afficher le contenu de l'attribut tel qu'il a été formaté, avec les balises HTML en place. Mais, Rails échappe à toutes les balises HTML! Comment puis-je désactiver ce comportement pour cet attribut de classe?
Exemple:
somePost = Post.new
somePost.content = "<strong> Hi, i'm here! </strong>"
Dans le modèle erb:
<%= somePost.content %>
Le HTML généré est échappé:
<strong> Hi, i'm here! </strong>
Essayez d'utiliser raw(somePost.content)
. Alternativement, somePost.content.html_safe
.
Utilisez raw(string)
, comme décrit dans les notes de version .
7.4.3 Autres changements
Vous n'avez plus besoin d'appeler h(string) pour échapper à la sortie HTML, elle est activée par défaut dans tous les modèles de vue. Si vous voulez la chaîne non échappée, appelez raw (chaîne).
Fondamentalement, où vous l'avez fait
<%=h @model.attr %>
avant de pouvoir maintenant utiliser
<%= @model.attr %>
et où vous avez fait que avant de pouvoir maintenant utiliser
<%=raw @model.attr %>
L'utilisation d'un double égal signifie que le résultat n'est pas échappé ...
<%== somePost.content %>
Voir cette SO question à ce sujet - Que fait <% ==%> dans Rails erb?