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 

と私@名1はまだNilClassました。 :/

答えて

9

superを使用して)自分の基底クラスのコンストラクタを呼び出す必要があります。 superを試してください:

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

の方法をActiveRecord::Baseに上書きしています。クラスの新しいインスタンスを作成するときにはinitilizeだけが呼び出されます。 ActiveRecord::Baseが作成したインスタンス変数はすべて初期化されず、#inspectは失敗します。この問題を解決するためには、あなたはActiveRecordののinitializeメソッドをオーバーライドしている

class Arch < ActiveRecord::Base 

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

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

驚くべき、感謝の半ダン。 – tquarton

関連する問題