2

我想初始化和實例變量作爲數組如下:初始化實例變量爲一個數組 - 紅寶石

class Arch < ActiveRecord::Base 
    attr_accessor :name1 

    def initialize 
     @name1 = [] 
    end 

    def add_name1(t) 
     @name1 << t 
    end 

    end 

當我嘗試Arch.new在控制檯會話我得到(對象不支持#inspect)。這是怎麼回事?我如何製作實例數組變量?我試圖按照this像這樣:

class Arch < ActiveRecord::Base 
attr_accessor :name1 

    def after_initialize 
    @name1 = [] 
    end 

    def add_name1(t) 
    @name1 << t 
    end 

end 

和我@ NAME1仍然是一個NilClass。 :/

回答

9

要覆蓋的ActiveRecord的initialize方法。嘗試使用super

def initialize(*args, &block) 
  super 
  @name1 = [] 
end 
3

您正在使用initialize方法ActiveRecord::Base。當創建你的類的新實例時,只有你的initilize被調用。 ActiveRecord::Base將創建的所有實例變量都未初始化,並且#inspect失敗。爲了解決這個問題,你需要調用基類的構造函數(使用super

class Arch < ActiveRecord::Base 

    attr_accessor :name1 
    def initialize 
    super 
    @name1 = [] 
    end 

    def add_name1(t) 
    @name1 << t 
    end 
end 
+0

令人驚歎的是,感謝halfdan。 – tquarton