2012-10-18 88 views
1

我正在使用裝飾類將一些功能添加到我的模型中。我只想用這些信息來處理一些值,但不保存任何東西到數據庫中。ActiveRecord協會上的裝飾模式和類型不匹配

我有我的裝飾類,類似:

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是相同的,爲什麼我仍然得到異常?

感謝

+0

它可能更容易使用SimpleDelegator,類似:**類Deco

回答

4

原來我也有覆蓋內ActiveRecord::Associaions::Association

使用is_a?方法做後:

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

異常沒有被扔了。