0

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_job5 分で実行message_notificationされますが、そのメソッドが完了すると、その中で何が起こったかに関係なく、電子メールが送信されます。

条件付きで配送をキャンセルする方法はありますか (@userメッセージを読む)?

4

0 に答える 0