我的Ruby on Rails应用程序需要基于数据库记录生成报表。我一直在数据库中存储生成这些报表所需的SQL和ERB代码。每个报表由三部分组成:
虽然这样做完全可以胜任工作,但我开始感到存储实际源代码在数据库中有些不安。另一种提出的选择是,不是将代码存储在数据库中,而是将代码存储在文件中,并从数据库中引用这些文件。对我来说,这听起来并不好(实际上更麻烦了,因为我不仅要渲染数据库列中的文本,还要打开和读取文件)。
关于在数据库中存储源代码,普遍的共识是什么,还有一些(更好的)替代方案:一些考虑因素包括:
- 很少添加新数据(我们谈论的是基于自1999年以来没有变化的联邦法规的报告) - 如果确实需要更改,除了我之外永远不会被其他人修改(虽然我显然无法预测未来,但是让我们假设这是正确的) - 记录的数量是有限的。我们最多只涉及八个不同的报告。
- 一个头部,它是一个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年以来没有变化的联邦法规的报告) - 如果确实需要更改,除了我之外永远不会被其他人修改(虽然我显然无法预测未来,但是让我们假设这是正确的) - 记录的数量是有限的。我们最多只涉及八个不同的报告。