2010-05-07 106 views
3

我遇到了以下问题:存储在我想呈现的数据库中的rhtml(与内部的红宝石一起嵌入了<%和<%=%>标签)。该信息通过查询获取。我需要能够评估从数据库中获得的信息,就好像它是.erb文件中的正常内容一样。我目前有:使用erb呈现变量

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

其中mod [“HTML”]是包含RHTML码变量和@mymods从查询对象的数组。我目前不知道应该使用什么函数(render_text当然不起作用)。

帮助是极大的赞赏。

/TZer0

回答

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代码。

+1

感谢您的帮助,这工作。对不起,无法为此赞扬你。我还没有15个代表;) – TZer0 2010-05-08 23:48:54