我知道这是一段时间,但最佳实践永远不会死,对吧?:)
电子邮件是按定义异步通信(除了确认电子邮件,但即使是这一个,它应该是一个最好的做法,以在必须确认之前留下延迟)。
因此,在我看来,送它最合理的方式是:
问题在Rails的是,它是太多回调没有(如JS为例):我personnaly觉得脏有这样的代码:
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
甚至creating an event system in your app将是一个体面的解决方案。
但最终的解决方案是相当昂贵的时间,使人们最终行动了
def activate
[...]
user.save
Mailer.send_mail
respond_to
[...]
end
这是最接近时尚同步编程回调,并具有邮件程序调用处处结果后直列写它(在Model
和Controller
)。
我看错了吗,还是你自相矛盾? “直接在用户成功创建后,我会将它写入控制器。”那么后来“由于陈述的原因,我认为邮件调用应该是他们有意义的地方,通常这个模型就是那个地方。” – Cameron 2014-09-17 22:26:06