首页 > 解决方案 > Rails 5 - 防止电子邮件发送给未订阅用户的最佳方法

问题描述

我正在使用 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

似乎if affiliate.email_notifications_on?在 10 多个领域写作并不是正确的方法,特别是如果我将来需要满足另一个条件。或者这样好吗?

我认为也许某种回调AffiliteMailer会起作用,但看到很多人建议不要在 Mailer 中使用业务逻辑。

任何想法/建议将不胜感激。

标签: ruby-on-railsruby-on-rails-5actionmailer

解决方案


老实说,我认为没有比在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。


推荐阅读