私は特定のユーザーにニュースレターを送信するActionMailer関数を実装しようとしています。ニュースレターは購読しているユーザーにのみ送信されるようにしたい。私はそうのようにそれを実装してみました:ActionMailer :: Base関数からどのように戻ってきますか?
class UserMailer < ActionMailer::Base
def newsletter(user)
return unless user.subscribed # This still renders my mailer view
mail(:to => user.email, :subject => "Newsletter")
end
end
問題はreturn unless user.subscribed
ラインはまだメーラービューをレンダリングするように見え、まだ(cronジョブから)呼び出しコードによって送信されたということです。
task :cron => :environment do
User.where(:subscribed => true).each do |user|
UserMailer.newsletter(user).deliver
end
end
私は、パフォーマンス上の理由から、サブスクリプションのロジックを自分のcronジョブでも持っていることに注意してください(すべてのユーザーに対して、サブスクライブされているもののみを繰り返す必要はありません)。しかし、UserMailerクラスがこのロジックが存在する適切な場所であると感じます(そうでなければ、newsletter
メソッドを呼び出す他の場所でもsubscribed
フラグもチェックする必要があります)。