保存函数传递的对象值

时间:2016-05-28 12:27:19

标签: ruby-on-rails ruby object

我有以下代码:

num = 42556
while num > 9
    num = num / 10

问题出在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 rails中使用param messaggio仍然使用初始化期间定义的.new(:messaggio => messaggio,..常量。 为什么呢?

1 个答案:

答案 0 :(得分:0)

因为您在对象初始化后将MESSAGENOTDEFINED分配给messaggio。当您执行.new(:messaggio => 'my_messaggio', ...)之类的操作时,有两个步骤:

  1. 初始化。在此步骤messaggio将分配'my_messagio'
  2. after_initialize回调执行。在此步骤messaggio将根据您的代码分配MESSAGENOTDEFINED
  3. 看起来你想要使用这样的东西:

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

    这意味着MESSAGENOTDEFINED只有在假名或尚未初始化时才会分配给messaggio。此外,self都是多余的。