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

问题描述 投票:0回答:1

我使用的是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-rails ruby-on-rails-5 actionmailer
1个回答
0
投票

说实话,我不认为有什么更好的方法比在Rails 5中创建一个方法更好。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。

© www.soinside.com 2019 - 2024. All rights reserved.