我知道已经有一段时间了,但最佳实践永远不会消失,对吧?:)
电子邮件按照定义是异步通信(确认电子邮件除外,但即使是这封电子邮件,在必须确认之前留出延迟应该是一种最佳实践)。
因此,在我看来,最合乎逻辑的发送方式是:
Rails 中的问题是它没有太多的回调(例如在 JS 中):我个人觉得有这样的代码很脏:
after_save :callback
def callback
if test_that_is_true_once_in_the_objects_life
Mailer.send_email()
end
end
所以,如果你真的想像程序员一样思考,那么想法是在你的应用程序中设置一些自定义回调系统。
例如。
def run_with_callback(action, callback_name)
if send(action)
delay.send(callback_name)
end
end
甚至在您的应用程序中创建一个事件系统将是一个不错的解决方案。
但最终这些解决方案在时间上是相当昂贵的,所以人们最终在行动之后将其内联编写
def activate
[...]
user.save
Mailer.send_mail
respond_to
[...]
end
这是同步编程中最接近回调的方式,并且结果使 Mailers 到处调用(inModel
和 in Controller
)。