我已经将一个大型应用程序从rails 2移植到rails 3.新应用程序使用Datamapper作为其ORM(在我进入项目之前做出的决定,所以我不能改变它)。
旧的应用程序使用了activerecord“after_find”回调非常广泛;
class Foo < ActiveRecord::Base
after_find :bar
def bar
#This would be called after an object was "found"
end
end
我需要在Datamapper中实现它,但我不能只修补find方法,因为datamapper使用的是组合而不是继承;
class Foo
include Datamapper::Resource
end
所以,如果我修补了查找方法,我将无法调用原始方法!有人能指出我正确的方向吗?
==编辑==
我尝试过包含以下内容:
module ClassMethods
def after_find(meth)
class << self
alias_method :orig_first, :first
def first(*args, &block)
puts "XXX FOUND THE FIRST"
orig_first args, &block
end
end
end
end
但这只是将代码发送到无限循环(不断打印“XXX FOUND THE FIRST”)