Rails 3 で動作するメーラーがあります。
メーラーメソッド内に、メールを送信するかどうかを決定するロジックが必要です。私はDelayed_job
遅れて使用しているので、このロジックをメーラーの外に置くことはできません。メールを1時間遅らせます。条件が満たされていない場合は、メールを送信します。
1.メーラーメソッドに入って送信を完了しない方法はありますか(優雅に)
2.私が試みていることを達成するためのより良い方法はありますか?
コードサンプル
これがメーラー
class MessagesMailer < ActionMailer::Base
def message_notification(user, message)
@user = user
@msg = message
mail(to: @user.email, from: "#{@msg.sender.name} <me@myapp.com>", subject: "You have recieved a new message from #{@msg.sender.name}")
end
end
MessagesMailer.delay(:run_at => 5.minutes.from_now).message_notification(@user, @message)
アプリ全体、特にから呼び出されていますMessagesController
@user
そのメッセージをすでに読んだかどうかを確認したい。その場合は、メールを送信しないでください。
Delay_job
5 分で実行message_notification
されますが、そのメソッドが完了すると、その中で何が起こったかに関係なく、電子メールが送信されます。
条件付きで配送をキャンセルする方法はありますか (@user
メッセージを読む)?