エンジニアリングにはほど遠い

iPhoneアプリとかサイトとかをつくっていくブログです。

Rails インスタンスが持つインスタンス変数一覧をハッシュで取得

ActiveRecordのattributes的な。

instance_values でできるみたいです。(要ActiveSupport)

[1] pry(main)> class Hoge
[1] pry(main)*   attr_accessor :a, :b, :c
[1] pry(main)* end
=> nil
[2] pry(main)> hoge = Hoge.new
=> #<Hoge:0x007fec4b2859d0>
[3] pry(main)> hoge.instance_values
=> {}
[4] pry(main)> hoge.a = 1
=> 1
[5] pry(main)> hoge.c = 4
=> 4
[6] pry(main)> hoge.instance_values
=> {"a"=>1, "c"=>4}

値が入っていないインスタンス変数は無視されるし、使い勝手がいいです。
@でインスタンス変数を足したときも見てみました。

[1] pry(main)> class Hoge
[1] pry(main)*   def sss
[1] pry(main)*     @s = 12
[1] pry(main)*   end
[1] pry(main)* end
=> :sss
[2] pry(main)> hoge = Hoge.new
=> #<Hoge:0x007ff1f3c5df40>
[3] pry(main)> hoge.instance_values
=> {}
[4] pry(main)> hoge.sss
=> 12
[5] pry(main)> hoge.instance_values
=> {"s"=>12}
[6] pry(main)>

足されてますね〜。