我遇到了以下问题:我有一个存储在我想要呈现的数据库中的rhtml(html与ruby里面的< %%>和<%=%>标记一起切碎)。通过查询获取信息。我需要能够评估从数据库中获取的信息,就好像它是.erb文件中的正常内容一样。我目前有什么:
<% @mymods.each do |mod| %>
<%= render_text(mod["html"])%>
<% end %>
其中mod [“html”]是包含rhtml代码的变量,而@mymods是来自查询的对象数组。我目前不知道我应该使用什么功能(render_text当然不起作用)。
非常感谢帮助。
/ TZer0
答案 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代码。