4

私の 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 つの異なるレポートについて話しています。
4

1 に答える 1

4

DBにコードを保存することに問題はありませんが、それがめったに追加されず、それを変更する唯一の人である場合、そうする(DBに保存する)ことで実際に何を得るのだろうかと思います頻繁に変更する必要がない限り、それだけの価値があるとは少し懐疑的です。OTOH、IMO、アプリの残りの部分と同じテストを受ける限り、そうしても害はありません。

DB 内のテンプレート -- それも問題ありませんが、同じ注意事項が適用されます。特に Rails 3+ では、Rails を拡張して DB からテンプレートを自動的に取得できるため、手作業を節約できる可能性があることに注意してください。

他に優れた代替手段があるかどうかはわかりませんが、懸念事項が再展開である場合は、DB BLOB ではなくアップロードされたファイルを検討することになるでしょう。

于 2012-05-02T17:16:41.337 に答える