2016-10-02 9 views
0
に保存されている

ここで疑問がactionmailerのテンプレートは、DB

「それはDBに電子メールテンプレートを保存してレンダリングする悪い習慣はありますか?」であります

私が知っているのは、人々が適用しないものです。 (通常はそれが行くように.erbと良いからレンダリングだし、それは可能な限りDBへのアクセスを避けるべきである。)

しかし、ビジネス上の理由から

  • 以下のビジネス要件があり、私が持っている必要があります各メールの履歴(誰が送信されたのか、どのタイトルと本文が送信されたのですか)

サードパーティのトランザクション電子メールサービスプロバイダは履歴を保存できますが、ローカルに保存する必要があります。

私はDB内にテンプレートを保存することを考えています。そのため、テンプレートが変更された場合でも送信された電子メールを追跡できます。

これに関するアドバイスはありますか?

答えて

1

ビジネス上の理由から、各メールの履歴が必要です。 (送信されてしまっています誰が、どのようなタイトルと体が送信されます。)

あなたは、次のアプローチで行くことができます。

  1. EmailsHistory
  2. のようなのインスタンスを作成し、DB-裏打ちされたARモデルを作成しますEmailsHistoryメールが出てくるたびに。ちょうどあなたがの情報を持っている必要があり、すべての列でemails_historyテーブルに行を追加するメール送信の瞬間に続いて
    ## Columns: 
    # * title 
    # * recipient 
    # * body 
    # * anything else 
    # 
    class EmailsHistory 
    end 
    


、。

+0

ありがとうございました!私はまた、電子メールを送信するときI/Oについてほとんど心配していません。あなたのアイデアを適用するときにDBのI/Oを減らす方法を提案できるなら、素晴らしいでしょう:)常にあなたの答えを感謝してください! – Tosh

+0

@Toshiこれはdbの高価な設定ではないはずですが、必要に応じてSidekを使って電子メールを送信し、dbに書き込むことができます。ロジックをサービスにラップしてバックグラウンドで処理することができます –

+0

私は電子メールを送信するための並列処理を考えています。したがって、バックエンドジョブを適用すると複雑になります。だから私はあなたの最初の提案に行くだろうと思う:)ありがとう! – Tosh

関連する問題