在Rails中创建新模型实例时发送电子邮件的最佳方式?

jak*_*xer 7 email model ruby-on-rails callback observer-pattern

我有以下型号的应用:User,Task,和Assignment.每个分配belongs_to用户和任务(或换句话说,任务通过分配分配给用户).

用户完成任务后,分配将标记为完成,应用程序会立即创建新的分配(或者换句话说,将任务分配给其他人).

创建此新作业后,我想立即向新受让人发送电子邮件.我知道我可以通过以下三种方式之一做到这一点:

  1. 在我的控制器中明确发送电子邮件.
  2. 在Assignment模型的回调中发送电子邮件.
  3. 在Assignment模型上创建一个观察者并发送电子邮件after_create.

人们认为哪种选择最好,为什么?#1对我来说似乎很糟糕,因为我不想记得在每个可能完成作业的动作中发送它.我听说有几个人说Rails观察员很糟糕,应该避免,但我不确定他们是不是我应该信任的人.还有其他意见吗?

Jai*_*yer 3

你是对的,第一种方法不是一个好方法。出于几个原因,观察员是我的首选方式。

首先,如果您使用 TDD(测试驱动开发),您可以关闭观察者以更纯粹地测试模型,而无需每次创建都触发邮件程序创建。然后您可以分别对邮件程序和观察者进行单元测试。

其次,分离回调的想法创建了更清晰的代码。回调实际上并不是模型的一部分,它们是事件。您的模型包含运行自身所需的函数和属性,并且回调(使用观察者实现)是单独的事件处理程序。

也就是说,我不认为你的第二个选择是“坏”或不太专业。只要是在模型级别,而不是控制器或(更糟糕的)视图,任何一种方式都有效。