将Ruby代码存储在数据库中

时间:2012-05-02 17:11:43

标签: sql ruby-on-rails database erb

我的Ruby on Rails应用程序需要根据数据库记录生成报告我已经存储了在数据库中生成这些报告所需的SQL和ERB代码。每份报告由三部分组成:

  • 标题,是使用<%= render inline: @report.header %>
  • 呈现的ERB代码段
  • 页脚,是另一个ERB代码段,使用<%= render inline: @report.footer %>
  • 呈现

然后使用@rows = eval("#{@report.model}.find_by_sql('#{@report.query}')")评估内容,使用以下内容进行评估:

<% @rows.each do |row| %>
  <tr>
    <% row.attributes.each_value do |value| %>
      <td><%= value %></td>
    <% end %>
  </tr>
<% end %>

@report.model中的模型是存储在列中的Ruby类的名称。

虽然这可以很好地完成工作,但我已经开始对将实际源代码存储在数据库中感到不安。已经提出的替代方案是将代码存储在数据库中而不是将代码存储在文件中,并且从数据库中引用这些文件。对我而言,这听起来并不是更好(事实上,这更麻烦,因为不是简单地在数据库列中呈现文本,我必须打开并读取文件)。

关于在数据库中存储此类源代码的一般共识是什么,以及哪些(更好)替代方案:一些注意事项包括:

  • 很少添加新数据(我们正在讨论基于自1999年以来没有改变的联邦法规的报告)
  • 如果它确实需要改变,它将永远不会被我以外的任何人修改(虽然我显然无法预测未来,但为了论证,我们假设这是正确的。)
  • 记录数量有限。我们最多只讨论八种不同的报告。

1 个答案:

答案 0 :(得分:3)

我没有在数据库中存储代码的问题,但我想知道,如果它很少添加,并且你是唯一一个改变它的人,你真正获得的是这样做(将其保留在DB中)。我有点怀疑它是否值得,除非它需要经常改变。 OTOH,IMO,这样做没有坏处,只要它受到你的应用程序其余部分的相同测试。

数据库中的模板 - 没有任何问题,尽管同样的警告适用。请注意,特别是在Rails 3+中,您可以扩展Rails以自动从数据库中检索模板,从而可能为您节省一些手动工作。

我不知道有没有很好的其他选择,虽然我可能会考虑上传文件而不是DB blob,如果您的担心是重新部署。