【发布时间】:2011-03-24 03:05:00
【问题描述】:
我编写了一个方便的 ActiveRecord 扩展来将方法委托给基础对象(基于multi-table inheritance)
类 ActiveRecord::Base def self.acts_as(base) class_eval %Q{ def method_missing(method, *args, &blk) #{base}.send(method, *args, &blk) 救援 NoMethodError 极好的 结尾 } 结尾 结尾我有一个 state 类和一个 base 类
# 状态类 类 MyState 'MyState' has_one :tail, :class_name => 'MyState' 结尾当我尝试这个时,我发现它在某些情况下不起作用。更具体地说,
> MyState.first.some_method_in_base 零 > MyObject.first.tail.some_method_in_base NoMethodError:#<:associations::hasoneassociation:0xabcdefg> 的未定义方法“some_method_in_base”谁能告诉我为什么一个有效而另一个无效?
【问题讨论】:
-
我还建议使用 ActiveSupport 提供的版本,称为 #delegate: api.rubyonrails.org/classes/Module.html#M000051
-
是的,我最终使用了委托,但它们不如将所有缺失的方法转发到基类的概念方便。
标签: ruby-on-rails ruby activerecord