Отключить экранирование HTML в шаблонах erb - PullRequest
39 голосов
/ 15 января 2011

В приложении на Rails 3 у меня есть класс домена, в котором один атрибут хранит чистый 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;

Ответы [ 3 ]

59 голосов
/ 15 января 2011

Используйте raw(string), как , описанное в примечаниях к выпуску .

7.4.3 Другие изменения

Вам больше не нужно вызывать h (string) для выхода из вывода HTML, он включен по умолчанию во всех шаблонах представления. Если вы хотите неэкранированную строку, вызовите raw (string).

В основном, где вы сделали

<%=h @model.attr %>

прежде чем вы сможете использовать

<%= @model.attr %>

и где вы сделали это , прежде чем вы теперь можете использовать

<%=raw @model.attr %>
58 голосов
/ 15 января 2011

Попробуйте использовать raw(somePost.content).В качестве альтернативы somePost.content.html_safe.

36 голосов
/ 18 января 2013

Использование двойного равенства означает, что результат не экранирован ...

<%== somePost.content %>

См. Этот вопрос об этом - Что делает <% ==%> в rails erb?

...