rails 3.1:过滤掉已选择退出的电子邮件地址的位置

时间:2011-09-16 23:24:54

标签: ruby-on-rails actionmailer

试图找出最简洁的方法,防止向已选择不在rails 3.1中接收邮件的用户发送电子邮件。

我正考虑重写Mail.deliver以检查数据库并确定收件人是否已取消订阅,然后有条件地发送电子邮件。

这似乎是最不具侵入性的方法,但需要创建永远不会被发送的Mail对象。

似乎最有资源意识的方法是在控制器中进行检查,从而防止永远不会从存在的负担中发送的Mail对象。

这似乎更具侵入性,并且在开发新邮件时,开发人员忘记进行检查。

这种情况是否有标准做法?

**编辑** 这用于管理已选择不接收通知的用户集合,而不是管理订阅新闻信件的用户。

1 个答案:

答案 0 :(得分:2)

如果确定是否获取电子邮件通知的属性只是数据库中模型的字段,则可以创建一个名为“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是您调用相关投放方法的方法,该方法实际上会发送电子邮件。

相关问题