猴子用Mongoid修补Rails中的数据库模型类会导致奇怪的行为



我正在使用开发脚本文件来检查新的可能的想法。最近我试图从该脚本文件中修补MyDBObject。假设一个空的dev.rb文件,并在顶部添加一个猴子补丁,如下所示:

class MyDBObject
  def test_function
    'function works'
  end
end

启动 pry 控制台并加载文件会产生随机结果。首先我收到:

NoMethodError: undefined method `relations' for MyDBObject:Class

后来加载了脚本,但我无法再访问原始类:

undefined method `first' for MyDBObject:Class

我注意到在行前面加上:

MyDBObject

就在猴子修补之前,就实现了预期的功能。这似乎是类对象的某种延迟加载。有人可以为我阐明这一点吗?

根据源文件的加载顺序,您将重新定义整个类,或者替换更改。

我强烈建议您阅读一下:http://www.justinweiss.com/articles/3-ways-to-monkey-patch-without-making-a-mess/(TLDR - 将您的补丁放在模块中并明确包含它(

最新更新