我的 Ruby on Rails 应用程序需要根据数据库记录生成报告 我一直在存储在数据库中生成这些报告所需的 SQL 和 ERB 代码。每份报告由三部分组成:
- 一个标头,它是一个 ERB 片段,使用
<%= render inline: @report.header %>
- 页脚,它是另一个 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 年以来未更改的联邦法规的报告)
- 如果确实需要更改,则除我之外的任何人都不会对其进行修改(虽然我显然无法预测未来,但为了争论,我们假设这是正确的)。
- 记录的数量是有限的。我们在这里最多讨论八种不同的报告。