рельсы 3.1: где отфильтровать адреса электронной почты, которые отказались - PullRequest
1 голос
/ 17 сентября 2011

Попытка найти самый чистый способ предотвратить отправку электронной почты пользователям, которые отказались от их получения в рельсах 3.1.

Я думал о переопределении Mail.deliver, чтобы проверить базу данных и определить, отписаны ли получатели или нет, а затем условно доставить письмо.

Это кажется наименее навязчивым способом, но требует создания объектов Mail, которые никогда не будут отправлены.

Похоже, наиболее ресурсоемким способом было бы выполнить проверку в контроллере, таким образом предотвращая отправку объектов Mail, которые никогда не будут отправлены, от бремени существования.

Это кажется более навязчивым и склонным к тому, что разработчики забывают проверить при создании новых почтовых программ.

Существует ли стандартная практика для такой ситуации?

** редактировать ** Это для управления коллекцией пользователей, которые отказались от получения уведомлений, а не для управления подписками на новостное письмо.

1 Ответ

2 голосов
/ 17 сентября 2011

Если атрибут, который определяет, следует ли получать уведомления по электронной почте, является просто полем модели в БД, вы можете создать именованную область действия, называемую чем-то вроде '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 - это метод, в котором вы вызываете связанный метод доставки, который фактически отправляет электронное письмо.

...