web-dev-qa-db-fra.com

Désactiver l'échappement HTML dans les modèles erb

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é:

&lt;strong&gt; Hi, i'm here! &lt;/strong&gt;
39
Lucas

Essayez d'utiliser raw(somePost.content). Alternativement, somePost.content.html_safe.

58
sevenseacat

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 %>
59
Skilldrick

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?

36
Chris Kimpton