从数据库渲染 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!("<","<").gsub!(">",">")) rescue ERB.new(@article.body)%>
<%= render :inline => erb.result(binding), :layout => false%>
</div>
【讨论】:
以上是关于从数据库渲染 erb 的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章