相关疑难解决方法(0)

method_missing覆盖不起作用

我编写了一个方便的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>

任何人都可以告诉我为什么一个工作而另一个不工作?

ruby activerecord ruby-on-rails

4
推荐指数
1
解决办法
3389
查看次数

标签 统计

activerecord ×1

ruby ×1

ruby-on-rails ×1