Ruby已经在使用我的模型的类名

我正在制作一个具有各种授权级别的论坛应用程序,其中一个是Monitor。 我这样做是通过扩展我的User类来实现的,我计划用“-ship”类(例如管理员,作者,主持人等)对其进行微调。 显然,Monitor类是ruby mixin的一部分。 如何在没有冲突的情况下保留我的资源名称?

一些可能性:

  • 避免require 'monitor.rb'调用,这会调用标准的Monitor实例
  • 做一些运行时魔术来重命名现有的Monitor类。
  • 猴子与您的加载路径,以便require 'monitor.rb'拉入一个空的Monitor实现。

但在所有情况下,您最终可能会遇到第三方库正在使用Monitor的情况,期望它是标准的Monitor类。 所以,我建议反对以上任何一个。

我会说你唯一合理的选择是:

A)您可以将您的类放在命名空间中:

 Module MyApp class Monitor #... end end 

如果您的应用程序使用某种自动需要的魔法(例如它是一个rails应用程序),那么您将把您的实现放在/my_app/monitor.rb中。 当你想引用那个类时,你会做类似my_monitor = MyApp::Monitor.new()等等。

B)你可以使用不同的类名:)

在其他模块中声明您的Monitor类。

 module MyModule class Monitor end end 

仅供参考,我刚刚发现了一个巧妙的技巧(错误,黑客),可以解决这个问题。

我研究了一个很大的遗留应用程序,不幸的是,它有一个非常重要且随处可用的“Fixture”模型。 运行测试时,由于ActiveRecord在运行测试时使用的Fixture类,因此无法创建Fixture实例。 所以我做了以下事情:

 FixtureModel = Fixture.dup 

这冻结了我的类,以便我可以稍后引用它(但只是在我的测试中!)而不是由ActiveRecord Fixture类(它没有命名空间)扩展