【问题标题】:Setting instance variables in Action Mailer?在 Action Mailer 中设置实例变量?
【发布时间】:2013-10-07 23:41:51
【问题描述】:

我想知道在 Mailers 中设置实例变量的干净且传统的方法是什么?目前,我在Mailer 中重新定义了initialize 方法,随后在任何从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

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

【问题讨论】:

  • 无论哪种方式对我来说都是干净的,FWIW。
  • 啊,所以如果我运行它实际上会发生错误,因为我在初始化时遗漏了参数:(method_name, *args)。
  • 我会保持打开状态,以防有人提供更清晰的答案。我最终使用了initialize,但我必须在分配 ivar 后调用 super,否则不会分配 ivar。

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


【解决方案1】:

有点晚了……

您可以使用 before_action 回调

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

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 2017-08-22
    • 2012-04-05
    • 1970-01-01
    • 2010-10-18
    • 2018-11-13
    • 2018-03-01
    • 2015-05-19
    • 2013-07-18
    相关资源
    最近更新 更多