用erb渲染变量

TZe*_*er0 3 ruby variables ruby-on-rails erb rhtml

我有以下问题:我有一个存储在我想渲染的数据库中的rhtml(与<%%>和<%=%>标记内的ruby一起拼成的html).通过查询获取信息.我需要能够评估从数据库中获取的信息,就好像它是.erb文件中的正常内容一样.我目前拥有的:

<% @mymods.each do |mod| %>
<%=  render_text(mod["html"])%>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

非常感谢帮助.

/ TZer0

dan*_*ich 11

您可以使用ERB对象呈现文本,而文本不在文件中.
只需使用<%= %>标签传递文本即可.您可以将以下内容作为application_helper函数.

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

然后在你的模板中

<%=  render_erb_text("<%= %w(hi how are you).join(' - ') %>")%>
Run Code Online (Sandbox Code Playgroud)

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

有关变量绑定等的更多信息,请查看ERB文档.

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