I wrote a convenient ActiveRecord extension for delegating methods to a base object (based on the inheritance of multiple tables )
class ActiveRecord :: Base
def self.acts_as (base)
class_eval% Q {
def method_missing (method, * args, & blk)
# {base} .send (method, * args, & blk)
rescue NoMethodError
super
end
}
end
end
I have a state class and a base class
# state class
class MyState <ActiveRecord :: Base
belongs_to: my_object
acts_as: my_object
end
# base class
class MyObject <ActiveRecord :: Base
has_one: head,: class_name => 'MyState'
has_one: tail,: class_name => 'MyState'
end
When I tried this, I found out that in some cases this does not work. More specific,
> MyState.first.some_method_in_base
nil
> MyObject.first.tail.some_method_in_base
NoMethodError: undefined method `some_method_in_base 'for # <ActiveRecord :: Associations :: HasOneAssociation: 0xABCDEFG>
Can someone enlighten me why it works and the other does not?
source share