2つのクラスがあるとします:
Class Foo
attr_accessor :bar
end
Class Baz < Foo
end
のインスタンスを作成Fooしていて、Bazその中に Foo インスタンスのデータを含む のインスタンスが必要です。
f = Foo.new(:bar => "Hi World")
# Doesnt work?
b = Baz.new(f)
どうやってするの?
インスタンス
Bazのデータを含む のFooインスタンス
Fooコンストラクターはすでに属性をハッシュとして受け入れているため、の属性をハッシュとして返すメソッドを作成できます。
class Foo
attr_accessor :bar
def initialize(attributes={})
@bar = attributes[:bar]
end
def attributes
{:bar => bar}
end
end
class Baz < Foo
end
Bazこれらの属性からインスタンスを作成できるようになりました。
f = Foo.new(:bar => "Hi World") #=> #<Foo:0x007fd09a8614c0 @bar="Hi World">
f.attributes #=> {:bar=>"Hi World"}
b = Baz.new(f.attributes) #=> #<Baz:0x007fd09a861268 @bar="Hi World">