用erb渲染变量

时间:2010-05-07 02:13:12

标签: ruby-on-rails ruby variables erb rhtml

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

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

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

非常感谢帮助。

/ TZer0

1 个答案:

答案 0 :(得分: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 documentation

我不熟悉其工作原理的详细信息,但在恶意或恶意数据库数据上运行此代码可能会有一些严重的风险。如果有的话,应该非常仔细地评估来自用户输入或任何未经审查的源的ruby代码。