2016-10-27 1 views
0

私はしばしば、削除されたものについて誰かに電子メールを送信しなければならなかった。問題は、非同期で電子メールを書き込むと、電子メールが生成される前にオブジェクトが削除されていることです。破壊されたオブジェクトに関する非同期電子メールを送信する

私は通常、sidekiqが示唆するように、パラメータとして整数と文字列を追加します。私はこのことについて考えた:

mail = MyMailer.some_mail(recipient_id, deleted_object_id) 
mail.delay.deliver 

をしかし、これはどちらか推奨されません。は私も2他のオプションを検討してきた


インスタンスのメソッドを遅らせる避けたが、私はそれを好きではありませんまったく。

  1. 使用acts_as_paranoid、記録にdeleted_atフィールドを設定する代わりに、DBから削除します。
  2. 、電子メールの本文をレンダリングDBに保存し、これを解決するpropperの道に後で

任意の提案を送信しますか?

+0

あなたはメールを送信する必要がありますか?あなたが確認しなければならないオプションである場合、おそらく編集的なことは良い選択です。しかし、通知するだけの場合は、テキストのみを保存するオプションがあると思います(メール本体またはそのようなもの) – inye

+0

最初のオプションを使用して、3日ごとまたは毎週実行するようにジョブをスケジュールすることができますそのジョブは、 'deleted_at <= 1.week.ago'を持つレコードを検索し、古いレコードを削除します。 – fanta

答えて

1

オブジェクトを削除して電子メールを送信するような緊密に結合されている場合は、両方を実行するsidekiqジョブを作成できます。だからあなたは仕事にIDを送るだけでいいです。 sidekiqジョブは、オブジェクトを削除し、ジョブ内で同期した電子メールを送信します。あなたの要求のために、メールはまだ非同期に送信されます。

+0

私はアイデアが好きです。私が残念なのは、ジョブがまだ実行されていない可能性があるため、削除をトリガーしたユーザーにはオブジェクトが表示されるということだけです。たぶん、 'deleted_at'オプションは結局のところ行く方法です。 –

関連する問題