每当我的应用发送电子邮件时,我都想运行一些代码。
由于ActionMailer不支持after_filter,我想使用观察者。
Rails文档顺便提一下,但没有详细说明。
谢谢!
答案 0 :(得分:76)
我很惊讶Rails的文档中有这么一点。
基本上,Rails 3中的ActionMailer引入了Interceptor的使用(在发送消息之前调用)和Observers(在消息发送之后)。
要设置观察者,请将以下内容添加到初始值设定项:
class MailObserver
def self.delivered_email(message)
# Do whatever you want with the message in here
end
end
ActionMailer::Base.register_observer(MailObserver)
现在,delivered_email
方法将在您的应用每次发送电子邮件时运行。但是,您只能访问实际的Mail
消息。
要注册拦截器,请执行与上述相同的操作,将register_observer
替换为register_interceptor
,并将方法从self.delivered_email
重命名为self.delivering_email
。
This Railscast是我能找到的关于此信息的最佳来源(他们只谈论拦截器,但观察者的概念是相同的)。