Rails 5 - 防止向未订阅用户发送电子邮件的最佳方法

Rails 5 - Best way to prevent emails from being sent to unsubscribed users

我正在使用 Rails 5.

我有一个 Affiliate 模型,具有布尔属性 email_notifications_on

我正在为会员构建一个非常强大的电子邮件滴灌系统,但无法弄清楚在发送电子邮件之前检查会员是否有电子邮件通知的最佳位置。

我的大部分电子邮件都是从 Resque BG 工作发送的,其他一些来自控制器。

这是我如何检查 BG 作业的订阅状态的示例:

class NewAffiliateLinkEmailer

  @queue = :email_queue

  def self.perform(aff_id)

    affiliate = Affiliate.find(aff_id) 

    if affiliate.email_notifications_on?
      AffiliateMailer.send_links(affiliate).deliver_now
    end

  end
end

似乎在 10+ 个区域中写 if affiliate.email_notifications_on? 并不是正确的做法,特别是如果我将来需要满足另一个条件。或者这样可以吗?

我认为 AffiliteMailer 中的某种回调可能会起作用,但看到很多人反对邮件程序中的业务逻辑。

任何 thoughts/advice 将不胜感激。

老实说,我认为没有比在 Affiliate 模型中创建一个方法更好的方法了,

def should_send_email?
  # all business logic come here
  # to start with you will just have following
  # email_notifications_on?
  # later you can add `&&` or any business logic for more conditions
end

您可以使用此方法代替属性。它更具可重用性和可扩展性。您仍然必须在每次调用中使用该方法。如果你喜欢单线,那么你可以使用 lambda。