我编写了一个方便的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
我有一个状态类和一个基本类
# 状态类 class MyState < ActiveRecord::Base belongs_to :my_object acts_as :my_object end
# 基本类 class MyObject < ActiveRecord::Base has_one :head, :class_name => 'MyState' has_one :tail, :class_name => 'MyState'
当我尝试使用它时,我发现它在某些情况下不起作用。 更具体地说,
> MyState.first.some_method_in_base 空值 > MyObject.first.tail.some_method_in_base NoMethodError: #<ActiveRecord::Associations::HasOneAssociation:0xABCDEFG>没有定义方法`some_method_in_base'
有人能解释一下为什么一个可以工作,而另一个不行吗?