ruby中的重写类方法
我正试图重写另一个gem中的一个方法。代码如下所示: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
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之后是正确的还是我读错了?