在Action Mailer中设置实例变量?

时间:2013-10-07 23:41:52

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 actionmailer

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

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

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

1 个答案:

答案 0 :(得分:3)

有点晚了......

您可以使用before_action回调

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