我想要一个邮件程序类(让我们说UserMailer
)在另一个邮件程序类上调用一个方法(让我们说LoggerMailer
)UserMailer
&# 39; s方法被调用。我的代码是这样的:
class LoggerMailer < ActionMailer::Base
def log_mail(...)
...
mail(layout: ..., template: ..., to: ..., from: ..., subject: ..., ...)
end
end
class UserMailer < ActionMailer::Base
def some_mail_method(...)
...
LoggerMailer.log_mail(...)
mail(layout: ..., to: ..., from: ..., subject: ..., ...)
end
end
UserMailer#some_mail_method
是主要的邮件方法,在调用此方法时,除了自己的LoggerMailer#log_mail
方法调用之外,我还希望它调用mail
。
但是,当我致电UserMailer#some_mail_method
时,它似乎没有拨打LoggerMailer#log_mail
。我觉得是这样的,因为当我在binding.pry
的方法体中放置一行LoggerMailer#log_mail
时,它似乎并没有在那时停止。
LoggerMailer.log_mail
吗?答案 0 :(得分:2)
您的问题是,邮件程序方法不会自行发送任何内容,它们(通过调用ActionMailer::MessageDelivery
)只返回deliver_now
个实例,然后有人调用deliver_later
或{{1}在那个ActionMailer::MessageDelivery
上实际安排交付。
执行此操作时:
LoggerMailer.log_mail(...)
你正在调用邮件程序,但丢掉它返回的ActionMailer::MessageDelivery
,这样就没有任何用处。
您需要发送日志邮件:
LoggerMailer.log_mail(...).deliver_now
您还可以将LoggerMailer.log_mail
和UserMailer. some_mail_method
消息放在一个包装器中,当调用者到处尝试传递{deliver_now
或deliver_later
方法时{1}}。