从数据库渲染 erb 的最佳方法?

Posted

技术标签:

【中文标题】从数据库渲染 erb 的最佳方法?【英文标题】:Best way to render erb from database? 【发布时间】:2013-10-12 02:32:03 【问题描述】:

我想将我的邮件模板以 erb 格式存储在我的数据库中。 在我的模板中,我需要访问与我在 rails 中基于 requular 文件的模板中的基本相同的帮助程序和实例变量。所以这就是我在邮件中的内容:

...
template = ERB.new(erb_from_db)
result = template.result(binding)
...

rails 是通过实际的控制器绑定还是存在更好的绑定,我应该将其传递给模板而不是控制器绑定?

我也读过render_to_string,但它看起来对我来说不是正确的,但我不确定。

或者你有什么其他建议吗?

【问题讨论】:

为什么不评估erb然后存储在db中 哇,评估的 erbs 对我来说听起来不是一个好主意。例如如果您使用该邮件模板通知订阅者订阅您的时事通讯。评估它的那一刻,您不再需要它,而不仅仅是在您的数据库中。 使用ERB.new()应该没问题:***.com/questions/2660808/… ERB 构成重大安全威胁:如果您的数据库被插入恶意数据,攻击者可能会在您的应用程序上运行 ruby​​ 代码。更安全的解决方案是使用纯 html,并使用您自己的标签丰富它,您将在运行时将其替换为适当的值。 @Maxence 模板:Today is: RUBY_DATE Ruby 代码:<%= $template.gsub(/RUBY_DATE/, Time.now.to_s %> 【参考方案1】:

这行得通

<div class="ibox-content">
<% erb = ERB.new(@article.body.gsub!("&lt;","<").gsub!("&gt;",">")) rescue ERB.new(@article.body)%>
<%= render :inline => erb.result(binding), :layout => false%>
  </div>

【讨论】:

以上是关于从数据库渲染 erb 的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

js.erb 不在 Rails 6 中渲染

定义? Ruby 和 Rails 中的方法

从rails中的控制器渲染部分

Rails:从另一个控制器渲染 .js.erb?

如何从 js.erb 视图中选择这个 div 元素

渲染 .json.erb 模板时不调用 jQuery .done