私の Ruby on Rails アプリケーションは、データベース レコードに基づいてレポートを生成する必要があります。これらのレポートを生成するために必要な SQL および ERB コードをデータベースに格納しています。各レポートは、次の 3 つの部分で構成されています。
- を使用してレンダリングされた 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 年以来変更されていない連邦規制に基づくレポートについて話しています)。
- 変更する必要がある場合は、私以外の誰かが変更することはありません (明らかに未来を予測することはできませんが、議論のために、これが当てはまると仮定しましょう)。
- レコード数には限りがあります。ここでは、最大で 8 つの異なるレポートについて話しています。