将实例变量初始化为数组 – Ruby

我正在尝试初始化和实例变量作为数组,如下所示:

class Arch < ActiveRecord::Base attr_accessor :name1 def initialize @name1 = [] end def add_name1(t) @name1 << t end end 

当我在控制台会话中尝试Arch.new时,我得到(Object不支持#inspect)。 这是怎么回事? 如何创建实例数组变量? 我试着像这样:

 class Arch < ActiveRecord::Base attr_accessor :name1 def after_initialize @name1 = [] end def add_name1(t) @name1 << t end end 

而我的@ name1仍然是一个NilClass。 :/

您正在覆盖ActiveRecord的initialize方法。 尝试使用super

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

您正在覆盖ActiveRecord::Baseinitialize方法。 在创建类的新实例时,只会调用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