使用Mongoid在Rails中修补db模型类会导致奇怪的行为

时间:2017-03-29 15:58:10

标签: ruby-on-rails mongoid

我正在使用开发脚本文件来检查新的可能的想法。最近我试图从该脚本文件中修改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

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

1 个答案:

答案 0 :(得分:0)

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

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