3

我想知道在Mailer中設置實例變量的乾淨和常規方式是什麼?目前,我已在Mailer中重新定義initialize方法,並隨後在從Mailer繼承的任何郵件程序中需要時覆蓋某些實例變量。在Action Mailer中設置實例變量?

class Mailer < ActionMailer::Base 
    attr_reader :ivar 

    def initialize 
    super 
    @ivar = :blah 
    ... 
    end 
end 

這隻對我而言很奇怪,因爲new是郵寄者的私人方法。例如,如果我嘗試在軌控制檯檢索這些,我需要做到以下幾點:

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

我也曾考慮將它們添加到default哈希像這樣:

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

唯一的問題是,我需要建立一個像這樣的方法來檢索實例變量:

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

無論方式似乎特別乾淨給我。我考慮過使用類變量,但我想知道是否有人可以提出一個更清晰的方法。謝謝。

+0

無論哪種方式似乎乾淨給我,FWIW。 – zeantsoi

+0

啊,所以如果我運行這個函數,實際上會產生一個錯誤,因爲我忽略了initialize上的參數:(method_name,* args)。 – RubeOnRails

+0

如果有人提供了更清晰的答案,我會保持開放狀態。我最終使用'initialize',但是我必須在IVAR賦值之後調用'super',否則Ivars不會被賦值。 – RubeOnRails

回答