在datamapper中实现“after_find”

时间:2014-01-07 11:05:44

标签: ruby-on-rails ruby datamapper

我已经将一个大型应用程序从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”)

0 个答案:

没有答案