我编写了一个方便的ActiveRecord扩展来将方法委托给基础对象(基于多表继承)
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
我有一个州级和一个基类
# 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
当我尝试这个时,我发现它在某些情况下不起作用.进一步来说,
> 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>
任何人都可以告诉我为什么一个工作而另一个不工作?