在Action Mailer中设置实例变量?

我想知道在Mailers中设置实例变量的干净和传统方法是什么? 目前,我已经在Mailer重新定义了initialize方法,并且随后在从Mailerinheritance的任何邮件程序中需要时覆盖某些实例变量。

 class Mailer < ActionMailer::Base attr_reader :ivar def initialize super @ivar = :blah ... end end 

这对我来说似乎很奇怪,因为new是邮件的私有方法。 例如,如果我尝试在rails控制台中检索这些,我需要执行以下操作:

 mailer = Mailer.send(:new) mailer.ivar 

我也考虑过将它们添加到default哈希中,如下所示:

 class Mailer < ActionMailer::Base default ivar: :blah, ... end 

唯一的问题是我需要创建一个这样的方法来检索ivars:

 def default_getter(ivar) self.class.default[ivar] end 

这两种方式对我来说都不是特别干净。 我考虑过使用类变量,但我想知道是否有人可以提出更清洁的方法。 谢谢。

只是有点晚了……

您可以使用before_action回调

http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-callbacks