Eri*_*man 13 email ruby-on-rails
在常见的Ruby on Rails 3/4应用程序中,有两种选项可在创建模型后传递邮件:
1)直接从控制器的创建操作发送邮件
#listings_controller.rb
def create
@listing.create(params[:listing])
if @listing.save
ListingMailer.new_listing_notice(@listing).deliver
format.html {redirect_to @listing}
...
end
end
Run Code Online (Sandbox Code Playgroud)
或2)从模型回调发送邮件
#listing.rb
class Listing
after_create :notify
...
def notify
ListingMailer.new_listing_notice(self).deliver
end
end
Run Code Online (Sandbox Code Playgroud)
关于哪种方式更好,目前有共识吗?从控制器发送可以提供更多控制,但如果始终发送邮件,是否有任何理由不使用回调?这主要是风格问题,还是有其他重要问题?
Iva*_*rea 14
通常,维护具有after_*模型钩子的代码要困难得多.当然,在某些情况下,使用回调非常合理(例如,计算校验和应该在某些应用程序中始终进行),但这些情况是规则的例外情况.
在您使用电子邮件的示例中,这是回调方法的一些缺点:
例如,您希望使用特殊队列发送电子邮件.与队列通信的接口不应以任何方式影响列表模型的构建方式.
电子邮件只是与外界互动的手段之一.并非所有业务逻辑都需要与外部世界联系在一起.其中一个例子,如提到的apneadiving是import.另一个例子是控制台界面(您希望在使用rails控制台时发送电子邮件吗?)
这更多是1和2的结果,但after随着时间的推移,测试钩越来越困难.在测试Listing模型时需要模拟邮件程序,这使得测试不清楚,并且每当有变化时都难以维护.
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |