2016-05-28 39 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