通常在对模型执行操作后调用发送电子邮件,但电子邮件本身是查看操作.我正在寻找你如何思考要问自己哪些问题来确定动作邮件方法调用的位置.
我见过/使用过它们:
在模型方法中 - 相关但单独关注的错误耦合?
在模型的回调中(例如after_save) - 就我目前的知识水平而言,最好的分离.
在控制器操作中 - 只是感觉不对,但有没有情况这是构建代码的最明智的方法?
如果我想知道如何编程我需要像程序员一样思考,那么学习如何通过特定的编程解决方案进行思考就值得花几个月的时间独立编码.谢谢!
迟到的答案,但我想在这个问题上合理化:
通常,在Web应用程序中,您希望发送电子邮件作为对客户端的直接反应.或者作为后台任务,如果我们正在讨论时事通讯/通知邮件的话.
该模型基本上是一个数据存储映射器.它的逻辑应该封装数据处理/通信与数据存储处理.因此,插入与其无关的逻辑有点棘手,而且在大多数情况下是错误的.我们举个例子:用户注册一个帐户,应该收到一封确认电子邮件.在这种情况下,可以说,确认电子邮件是创建新帐户的直接影响.现在,尝试在控制台中创建用户,而不是在Web应用程序中执行此操作.在这种情况下触发回调听起来不对,对吗?因此,回调选项被刮伤了.我们还应该在模型中编写方法吗?好吧,如果它是用户操作/输入的直接影响,那么它应该保留在该工作流程中.用户成功创建后,我会在控制器中编写它.直.无论如何,在要在控制器中调用的模型中复制此逻辑会增加不必要的模块性,以及来自Action Mailer的Active Record模型的依赖性.尝试考虑在许多应用程序上共享模型,其中一些应用程序不需要Action Mailer.出于上述原因,我认为邮件调用应该是他们有意义的地方,通常模型不是那个地方.试着给我一些它做的例子.