无法将 HTML 字符串转储到 Rails 视图中

Trouble dumping into HTML string into Rails view

我正在玩一个 Rails 应用程序,它打算显示我拥有的一些 XML 数据的 HTML 渲染。

我在控制器中使用 Nokogiri 将 XML 文档转换为一串 HTML 标记,然后在视图中尝试显示它。但是当我加载页面时,所有 HTML 标记 <div> 等都被视为字符串的一部分,而不是 HTML 标记。

转换逻辑如下所示:

def xslt_apply_to(xml_open_uri_file, xsltfile, xslt_param_array)
    xml  = xml_open_uri_file
    xslt = Nokogiri::XSLT(open(xsltfile))
    result_doc = xslt.apply_to(xml, xslt_param_array)
    return result_doc
end

其中 xml_open_uri_file 是我正在转换的 XML 文件,xsltfile 是我用来转换它的文件。

这个方法returns一个包含

的字符串
"<div><p>Test test test test test</p></div>"

下面在@transform中捕获:

@transform = xslt_apply_to(xmldoc,xsltdoc,xslt_param_array)

然后我尝试将其包含在我的视图中,如下所示:

<div id="lbp-text-body" class="container">
    <%= @transform %>
<div>

但是在浏览器中出现的结果是:

<div><p>Test test test test test</p></div>

当我真正想要的是用浏览器识别的 <div><p> 包裹的文本。所以我应该在浏览器中看到的是:

Test test test test test

知道发生了什么事吗?

试试这个:

<%= raw(@transform) %>

raw()html_safe() 的包装器,它强制输入字符串,然后在其上调用 html_safe()

您可以参考“SafeBuffers and Rails 3.0”获取更多信息。

另一种选择。你试过html_safe了吗?它比 raw 少了一个处理步骤,这就像调用 to_s 然后 html_safe 附加。一种快捷方式,但仅当您知道您的字符串不为零时才使用。

<%= @transform.html_safe %>