将实例变量初始化为数组 – 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::Base
的initialize
方法。 在创建类的新实例时,只会调用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