2016-05-28 40 views
0

傳遞的對象值I具有folliwing代碼:保存由函數

class LogFactory < ActiveRecord::Base 
    after_initialize :inizializza 
    MESSAGENOTDEFINED = "Msg" 


    def inizializza 
     self.happened = Time.current 
     self.messaggio = MESSAGENOTDEFINED 
    end 


    def setMessage(messaggio) 
     logger = LogFactory.new(:messaggio => messaggio, :happened => self.happened) 
     logger.save 
    end 
    end 

的問題是在messaggio變量。我的意思是,即使我在.new(:messaggio => messaggio,..中使用參數messaggio仍然使用在初始化過程中定義的MESSAGENOTDEFINED常量。 爲什麼?

+0

我覺得你很困惑。你能用文字解釋你想達到什麼嗎? – Agis

+0

@Ilya我沒有。 – Agis

回答

0

原因您在對象初始化後將MESSAGENOTDEFINED指定爲messaggio。當您執行類似.new(:messaggio => 'my_messaggio', ...)時,有兩個步驟:

  1. 初始化。在此步驟messaggio將分配'my_messagio'
  2. after_initialize回調執行。無論如何,在這一步messaggio將根據您的代碼與MESSAGENOTDEFINED分配。

它看起來像你想使用這樣的:

def inizializza 
    happened ||= Time.current 
    messaggio ||= MESSAGENOTDEFINED 
end 

這意味着MESSAGENOTDEFINED將分配給messaggio,只有當它falsey或尚未初始化。而且,self都是多餘的。

+1

downvoter,請幫我改進我的答案。 – Ilya

+0

好吧,我明白我的錯誤!謝謝! – Vito

+0

@維託,不客氣) – Ilya