Инициализация переменной экземпляра в виде массива - Ruby - PullRequest
2 голосов
/ 10 ноября 2011

Я пытаюсь инициализировать и создать экземпляр переменной в виде массива следующим образом:

  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.: /

Ответы [ 2 ]

9 голосов
/ 10 ноября 2011

Вы переопределяете метод ActiveRecord initialize. Попробуйте использовать super:

def initialize(*args, &block)
   super 
   @name1 = []
end
3 голосов
/ 10 ноября 2011

Вы перебираете initialize метод ActiveRecord::Base.При создании нового экземпляра вашего класса будет вызываться только ваша инициализация.Все переменные экземпляра, которые ActiveRecord::Base создал бы, неинициализированы и #inspect завершаются ошибкой.Чтобы это исправить, вам нужно вызвать конструктор вашего базового класса (используя super)

class Arch < ActiveRecord::Base  

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

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