ruby中的重写类方法

ruby中的重写类方法,ruby,Ruby,我正试图重写另一个gem中的一个方法。代码如下所示: module DatabaseCleaner class Base def orm_strategy(strategy) # ... end end end 在我心中: require 'database_cleaner/base' module DatabaseCleaner class Base def orm_strategy(strategy) # New code

我正试图重写另一个gem中的一个方法。代码如下所示:

module DatabaseCleaner
  class Base
    def orm_strategy(strategy)
      # ...
    end
  end
end
在我心中:

require 'database_cleaner/base'

module DatabaseCleaner
  class Base
    def orm_strategy(strategy)
      # New code
    end
  end
end

然而,它的原件仍在使用中。我做错了什么?

您试图重写Foo::Bar类的实例方法。您必须重新定义类的方法:

module Foo
  class Bar
    def self.test  # self == Bar
      # New code
    end
  end
end

你先把原来的模块包括进去了吗?@MatheusMoreira ya只是一个输入错误here@NiklasB. 是的,我包括了原始模块文件location@Major:没有更多的信息很难说。这个概念是正确的。@NiklasB。我正在尝试制作一个临时的gem,它扩展了databasecleaner的功能,直到我的代码被集成到gem中。如果没有,我将得到我所需要的代码。尽管DBcleaner中有一行代码导致了问题,因为它做了一个require,并且路径特定于DBcleaner gem,所以我试图覆盖它,使它与我的新gem一起工作。如果有帮助的话,我可以发布代码…如果原始代码看起来像问题中描述的,OP实际上想要覆盖一个实例方法。尝试了这个,但没有解决问题。仍然在使用旧函数。@Major,能否在require调用之后和类定义之后添加p DatabaseCleaner::Base.instance_方法:orm_策略,然后告诉我们输出?@MatheusMoreira so:require'database\u cleaner/base'p DatabaseCleaner::base.instance\u方法:在require模块DatabaseCleaner类base end p DatabaseCleaner::base之后的orm\u策略。instance\u方法:orm\u策略在require end之后是正确的还是我读错了?