Del*_*man 2 activerecord decorator ruby-on-rails-3
我正在使用装饰器类为我的模型添加一些功能.我只希望这些信息用于处理某些值,但不能将任何内容保存到数据库中.
我有我的装饰类,类似于:
class Deco
def initialize o
@target = o
end
def method_missing method, *args, &block
@target.send(method, *args, &block)
end
#my extra methods
end
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
deco_model = Deco.new(model)
Run Code Online (Sandbox Code Playgroud)
这里有问题是当我想将它deco_mode与另一个相关联时,我得到一个类型不匹配错误,这是有道理的,但如果我将以下方法添加到我的装饰器类:
def class
@target.class
end
Run Code Online (Sandbox Code Playgroud)
我仍然得到相同的错误,但它说:模型(#aaaaaa)预期,得到模型(#aaaaa)是的,"模型"将是我的模型的类,并且对象id在两种情况下都是相同的..那么如果对象id是相同的,为什么我仍然得到异常?
谢谢
结果我也不得不覆盖is_a?里面使用的方法ActiveRecord::Associaions::Association
做完之后:
def is_a? klass
@target.class.object_id == klass.object_id
end
Run Code Online (Sandbox Code Playgroud)
异常不再被抛出.
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |