我定义了一个ActionMailer Observer并且没有被调用。我该如何解决此问题? Rails 3.1.3,Ruby 1.9.2。或者,我想要一个从某个ActionMailer子类发送电子邮件时调用的方法。这是我能找到的唯一干净的方法来实现它(我可以从ActionMailer子类中的每个邮件方法调用一个方法,但这不是很干)。关于如何实现这一目标的任何其他建议都将受到欢迎。
config/initializers/mail_observer.rb:
class MailObserver
def self.delivered_email(message)
require 'ruby-debug' ; debugger
user = User.find_by_email(message.to[0])
if user
email_type = caller[1]
UserMailerLogging.create!(user_id: @user.id, email_type: email_type, contents: self.body)
end
end
end
ActionMailer::Base.register_observer(MailObserver)
app/mailers/user_mailer:
class UserMailer < ActionMailer::Base
default from: "no-reply@testing.com"
...
def unfinished_setup(user)
@user = user
mail to: user_email(user), subject: "Testing..."
end
...
end
并且,在Rails控制台中:
irb(main):001:0> UserMailer.unfinished_setup(User.find(1))
=> #<Mail::Message:70192154395900, Multipart: false, Headers: <From: no-reply@testing.com>, <To: Test User<user@testing.com>>, <Subject: Testing...>, <Mime-Version: 1.0>, <Content-Type: text/plain>>
答案 0 :(得分:2)
我相信观察者在你真正传递信息之前不会开火。您在rails控制台中的代码仅创建电子邮件,而不是发送电子邮件。在末尾添加.deliver
应该传递消息并执行观察者代码。