Невозможно использовать «наследование», как вы описали, потому что в мире Ruby не существует такой вещи, как наследование от экземпляра.Но, сказав это, вы можете сделать некоторый взлом, чтобы получить то, что вам (я думаю) нужно, используя delegate
(вы можете сделать это, потому что, как вы писали, вы используете Rails):
class A
attr_reader :var # here, you set method to get `@var` value
# ...
end
class B < A
delegate :var, to: :a # here, you're setting delegator
attr_reader :a # It's used by line above
def initialize(a)
@a = a
end
def test
puts var
end
end
a1 = A.new('one')
a2 = A.new('two')
b1 = B.new(a1)
b2 = B.new(a2)
b3 = B.new(a2)
b1.test
# one
b2.test
# two
b3.test
# two
Имейте в виду, что это решение, написанное с нуля, так как не существует «синтетического» способа сделать это, так как нет наследования от экземпляров в мире Ruby.