装配器模式和ActiveRecord关联上的类型不匹配

时间:2012-10-18 13:50:37

标签: ruby-on-rails-3 activerecord decorator

我正在使用装饰器类为我的模型添加一些功能。我只希望这些信息用于处理某些值,而不是将任何内容保存到数据库中。

我有我的装饰类,如:

class Deco

   def initialize o
     @target = o
   end
   def method_missing method, *args, &block
     @target.send(method, *args, &block)
   end
   #my extra methods
end

我这样使用它:

deco_model = Deco.new(model)

这里有问题是当我想将这个deco_mode与另一个相关联时,我得到一个类型不匹配错误,这是有道理的,但是如果我将以下方法添加到我的装饰器类中:

def class
   @target.class
end

我仍然得到同样的错误,但它说:模型(#aaaaaa)预期,得到模型(#aaaaa) 是的,“模型”将是我的模型的类,并且在两种情况下对象id都是相同的...所以如果对象id是相同的,为什么我仍然得到异常?

由于

1 个答案:

答案 0 :(得分:5)

原来我还必须覆盖is_a?

中使用的ActiveRecord::Associaions::Association方法

完成后:

def is_a? klass
  @target.class.object_id == klass.object_id
end

不再抛出异常。