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类(它没有命名空间)扩展