我正在制作一个具有各种授权级别的论坛应用程序,其中一个是Monitor。我这样做是通过扩展我的User类来实现的,我计划用“-ship”类(例如管理员,作者,主持人等)对其进行微调。显然,Monitor类是ruby mixin的一部分。如何在没有冲突的情况下保留我的资源名称?
答案 0 :(得分:6)
一些可能性:
require 'monitor.rb'
调用
require 'monitor.rb'
拉入一个空的Monitor实现。 但在所有情况下,您最终可能会遇到第三方库正在使用Monitor的情况,期望它是标准的Monitor类。所以,我建议反对以上任何一个。
我说你唯一合理的选择是:
A)你可以将你的类放在命名空间中:
Module MyApp
class Monitor
#...
end
end
如果您的应用使用某种自动需要的魔法(例如它是一个rails应用),那么您可以将您的实现放在/my_app/monitor.rb中。如果你想引用那个类,你会做my_monitor = MyApp::Monitor.new()
或其他什么。
B)你可以使用不同的类名:)
答案 1 :(得分:2)
在其他模块中声明您的Monitor类。
module MyModule
class Monitor
end
end
答案 2 :(得分:2)
仅供参考,我刚刚发现了一个巧妙的技巧(错误,黑客)来解决这个问题。
我在一个大型的遗留应用程序上工作,遗憾的是,它有一个非常重要且随处可用的“Fixture”模型。运行测试时,由于ActiveRecord在运行测试时使用了Fixture类,因此无法创建Fixture实例。所以我做了以下事情:
FixtureModel = Fixture.dup
这会冻结我的类,以便我可以稍后引用它(但只是在我的测试中!)而不是由ActiveRecord Fixture类(它没有命名空间)扩展