3

I'm trying to initialize and instance variable as an array as follows:

  class Arch < ActiveRecord::Base  
  attr_accessor :name1

    def initialize
      @name1 = []
    end

    def add_name1(t)
      @name1 << t
    end

  end

When I try Arch.new in a console session I get (Object doesn't support #inspect). What's up? How do I make an instance array variable? I tried to follow this like so:

class Arch < ActiveRecord::Base
attr_accessor :name1

  def after_initialize
    @name1 = []
  end

  def add_name1(t)
    @name1 << t
  end

end

and my @name1 was still a NilClass. :/

2 Answers 2

10

You are overriding ActiveRecord's initialize method. Try using super:

def initialize(*args, &block)
   super 
   @name1 = []
end
Sign up to request clarification or add additional context in comments.

Comments

3

You are overiding the initialize method of ActiveRecord::Base. When creating a new instance of your class only your initilize will be called. All the instance variables that ActiveRecord::Base would have created are uninitialized and #inspect fails. In order to fix this you need to call the constructor of your base class (using super)

class Arch < ActiveRecord::Base  

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

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.