sql - 在数据库中存储 Ruby 代码

标签 sql ruby-on-rails database erb

我的 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 年以来未曾更改的联邦法规的报告)
  • 如果它确实需要更改,除了我之外,任何人都不会修改它(虽然我显然无法预测 future ,但为了论证,让我们假设这是正确的)。
  • 记录的数量是有限的。我们在这里最多谈论八种不同的报告。

最佳答案

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

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

我不知道还有什么很棒的其他选择,但如果您关心的是重新部署,我可能会考虑上传文件而不是 DB blob。

关于sql - 在数据库中存储 Ruby 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418502/

相关文章:

jquery - Rails 或 Jquery 所见即所得

mysql - 数据库从两个时间戳行获取持续时间

mysql - 在mysql中将 float 转换为十进制

ruby-on-rails - 将局部变量传递给每个循环 rails 的部分内部 3

database - 默认 getdate() 值错误 SQL AZURE

ruby-on-rails - 从 before_action 中排除 Controller

database - 具有数据库模式的SpecFlow集成测试

sql - 创建数据库或使用 xml

c# - 使用存储过程最优雅的方法是什么?

sql - 从sql查询中的列中获取多次出现的字符串