我使用的是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的业务逻辑。
任何想法和建议都将被感激。
说实话,我不认为有什么更好的方法比在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。