【发布时间】:2011-06-18 12:57:56
【问题描述】:
每当在我的应用上发送电子邮件时,我想运行一些代码。
由于 ActionMailer 不支持 after_filter,我想使用观察者。
Rails 文档顺便提到了这一点,但没有详细说明。
谢谢!
【问题讨论】:
标签: ruby-on-rails-3 observer-pattern actionmailer
每当在我的应用上发送电子邮件时,我想运行一些代码。
由于 ActionMailer 不支持 after_filter,我想使用观察者。
Rails 文档顺便提到了这一点,但没有详细说明。
谢谢!
【问题讨论】:
标签: ruby-on-rails-3 observer-pattern actionmailer
我很惊讶 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 是我能找到的最佳信息来源(他们只谈论拦截器,但对于观察者来说概念是相同的)。
【讨论】: