3

我遇到了以下问题:我将 rhtml(html 与 <% %> 和 <%= %> 标记内的 ruby​​ 一起切碎)存储在要呈现的数据库中。信息是通过查询获得的。我需要能够评估从数据库中获得的信息,就好像它是 .erb 文件中的正常内容一样。我目前拥有的:

<% @mymods.each do |mod| %>
<%=  render_text(mod["html"])%>
<% end %>

其中 mod["html"] 是包含 rhtml 代码的变量,@mymods 是来自查询的对象数组。我目前不知道我应该使用什么功能(render_text 当然,不起作用)。

非常感谢您的帮助。

/TZer0

4

1 回答 1

11

您可以使用 ERB 对象来呈现文本,而无需将文本放在文件中。
只需传递带有<%= %>标签的文本。您可以将以下内容作为 application_helper 函数。

def render_erb_text(text, args={})
   b = binding
   template = ERB.new(text, 0, "%<>")
   template.result(b)
end

然后在你的模板中

<%=  render_erb_text("<%= %w(hi how are you).join(' - ') %>")%>

您也可以考虑在控制器中渲染文本,因为您可以比在视图评估期间更好地处理任何渲染错误。

查看ERB 文档以获取有关变量绑定等的更多信息。

我不熟悉它如何在幕后工作的细节,但在不良或恶意数据库数据上运行此代码可能存在一些严重风险。从用户输入或任何未经审查的来源评估 ruby​​ 代码应该非常小心,如果有的话。

于 2010-05-07T02:44:30.080 回答