【发布时间】: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