在erb模板中禁用HTML转义

Luc*_*cas 39 escaping erb ruby-on-rails-3

在Rails 3应用程序中,我有一个域类,其中一个属性存储纯HTML内容(它是一个博客应用程序,域类是Post).

在ERB模板中,我需要在格式化时显示属性的内容,并使用HTML标记.但是,Rails正在逃避所有HTML标签!如何为此类属性禁用此行为?

例:

somePost = Post.new
somePost.content = "<strong> Hi, i'm here! </strong>"
Run Code Online (Sandbox Code Playgroud)

在erb模板中:

<%= somePost.content %>
Run Code Online (Sandbox Code Playgroud)

生成的HTML被转义:

&lt;strong&gt; Hi, i'm here! &lt;/strong&gt;
Run Code Online (Sandbox Code Playgroud)

Ski*_*ick 59

使用raw(string),如发行说明中所述.

7.4.3其他变更

您不再需要调用h(字符串)来转义HTML输出,默认情况下它在所有视图模板中都处于打开状态.如果你想要未转义的字符串,请调用raw(string).

基本上,你在哪里

<%=h @model.attr %>
Run Code Online (Sandbox Code Playgroud)

在你现在可以使用之前

<%= @model.attr %>
Run Code Online (Sandbox Code Playgroud)

在你现在可以使用之前你已经做到

<%=raw @model.attr %>
Run Code Online (Sandbox Code Playgroud)


sev*_*cat 58

尝试使用raw(somePost.content).或者,somePost.content.html_safe.

  • 恕我直言比.html_safe更安全,因为raw(nil)写"",其中nil.html_safe导致异常. (6认同)
  • .html_safe是Rails的一个实现细节,从未用于面向公众的API.应该使用`raw(string)`方法.https://groups.google.com/forum/#!topic/rubyonrails-core/T9N5wexIg80 (2认同)

Chr*_*ton 36

使用double equals意味着结果不会被转义......

<%== somePost.content %>
Run Code Online (Sandbox Code Playgroud)

看到这个关于它的问题 - 在rails erb中做什么<%==%>?