2011-09-16 15 views
1

最も簡単な方法を見つけようとすると、メールを受信しなかったユーザーにメールを送信しないようにします。rails 3.1:オプトアウトしたメールアドレスを除外する場所

Mail.deliverをオーバーライドしてdbをチェックし、受信者が購読中であるかどうかを判断し、条件付きで電子メールを配信することを検討していました。

これはやりにくいようですが、送信されることのないMailオブジェクトを作成する必要があります。

ほとんどのリソースを意識した方法のように、コントローラのチェックを行うことで、メールオブジェクトが存在しなくなることを防ぐことができます。

これは、新しいメーラを作成するときにチェックを忘れてしまった開発者にとって、より邪魔になりがちです。

この場合、標準的な方法はありますか?

**編集** これは、ニュースレターの購読を管理するのではなく、通知を受け取っていないユーザーのコレクションを管理するためのものです。

+0

最初にメールを送る相手をどのように決めていますか?サブスクリプションを追跡していた場合、これは簡単です(サブスクリプションを削除してください)。 – numbers1311407

+0

@ numbers1311407これはニュースレタータイプのものではなく、代わりに各ユーザーがシステム内のさまざまなイベントに関する通知メールを受け取ります。彼らはそれらの通知メールを受け取ることをオプトアウトするでしょう。 – greggreg

答えて

2

電子メール通知を取得するか否かを決定する属性がDB内のモデルにだけフィールドである場合は、加入していることをすべてのユーザーを取得するには「want_email_notifications」のようなものをと呼ばれる名前のスコープを作成することができます。

だから、あなたはUserクラスがあり、そのクラスは、属性がopt_out呼び出した場合、その後、あなたが何かを行うことができます:それを呼び出すために、そして、

class User < ActiveRecord::Base 

    named_scope :want_email_notifications, :conditions => ['opt_out = ?', false] 

    ... 
end 

を、あなたはあなたに与えUser.want_email_notificationsを行いますすべてのUserの電子メール通知を必要とするオブジェクトの配列。

次に、あなたが与えられたユーザーは、電子メール通知を受け取るに近い状態書き込む必要があるかどうかをチェックしているとき:この例では

send_email_notification(user_in_question) if User.want_email_notifications.include?(user_in_question) 

を、send_email_notificationはあなたが関連付けられて呼ぶような方法があります配送方法は実際にメールを送信します。

+1

私の状況では、すでにアプリ通知を受け取っているユーザーのリストを持っていて、オプトアウトしたユーザーに通知メールを送信していません。電子メールは通知のpost_createに自動的に送信されます。私は今のところ十分なpost_createフックにフィルタを置いてしまいました。しかし、私は本当に答えに感謝し、スコープは超便利です!ありがとう、あなたのためのupvote! – greggreg

関連する問題