- Cartクラスでアクセサとしてitemsを設定(同一オブジェクトからitemsを呼び出せる)
- Store_ControllerクラスでnewしてCartインスタンス生成。これをStore_Controllerクラスのインスタンス変数@cartに格納
- 同じStore_Controllerクラスのメソッドではインスタンス変数@cartを使いまわせる
- よって、
= からはitemsを呼び出せるはず...
#! /usr/bin/env ruby # -*- coding: utf-8 -*- class Cart attr_reader :items def initialize @items = [{:id=>1,:name=>'hoge'},{:id=>2,:name=>'foo'},{:id=>3,:name=>'bar'}] end end class Store_Controller def index @cart = Cart.new end def show @cart.items end end sc = Store_Controller.new p sc.show
出力結果
bash-3.2$ ruby instance_test.rb instance_test.rb:19:in `show': undefined method `items' for nil:NilClass (NoMethodError) from instance_test.rb:25
まちがえた。
Store_Controllerの生成時に@cartが対応していない。
def initialize @cart = Cart.new end
するか、
sc = Store_Controller.new
sc.index
p sc.show
とすることで、
bash-3.2$ ruby instance_test.rb [{:name=>"hoge", :id=>1}, {:name=>"foo", :id=>2}, {:name=>"bar", :id=>3}]
できた。