web-dev-qa-db-ja.com

erbテンプレートでHTMLエスケープを無効にします

Rails 3アプリケーションでは、1つの属性が純粋なHTMLコンテンツを格納するドメインクラスを持っています(これはブログアプリで、ドメインクラスはPostです)。

ERBテンプレートでは、HTMLタグを所定の位置に配置して、属性のコンテンツを表示されたとおりに表示する必要があります。しかし、RailsはすべてのHTMLタグをエスケープしています!このクラス属性に対してこの動作を無効にするにはどうすればよいですか?

例:

somePost = Post.new
somePost.content = "<strong> Hi, i'm here! </strong>"

Erbテンプレートで:

<%= somePost.content %>

生成されたHTMLはエスケープされます:

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

raw(somePost.content)を使用してみてください。または、somePost.content.html_safe

58
sevenseacat

リリースノートに記載 のように、raw(string)を使用します。

7.4.3その他の変更

HTML出力をエスケープするためにh(string)を呼び出す必要はなくなりました。すべてのビューテンプレートでデフォルトでオンになっています。エスケープされていない文字列が必要な場合は、raw(string)を呼び出します。

基本的に、どこでしたか

<%=h @model.attr %>

使用する前に

<%= @model.attr %>

そして、あなたが今使う前にthatをした場所

<%=raw @model.attr %>
59
Skilldrick

二重の等号を使用すると、結果がエスケープされません...

<%== somePost.content %>

こちらをご覧くださいSOそれについての質問- <%==%>は、Rails erb?

36
Chris Kimpton