在我的Rails 2.3应用程序中,我发现问题源于现有ActiveRecord模型与我最近添加的gem之间的命名空间冲突。
具体来说,我试图为应用添加jammit
支持。 jammit的一个依赖宝石需要'platform'
,它会在应用程序的命名空间中引入Platform
模块。但是,我已经有一个具有该名称的AR 类,并且重命名它将引入许多额外的工作和可能的错误。
我想知道是否有一种相对简单的方法(使用ruby的metamagic或whatnot)来防止这种命名空间冲突,而不必重命名我的类或改变实际的gem。感谢。
而不是在我的应用中重命名/包装类 Platform
,而且模块 Platform
只需要一个其他gem,我导致分配两个宝石,将Platform
重命名为XPlatform
(原始宝石和导入宝石的宝石),并重建它们。这似乎有效[叹气]。
答案 0 :(得分:4)
如果无法更改名称
时条件不可避免尝试将您的activerecord类包装在模块中
module YourModule
class Platform < Activerecord::Base
named_scope :your_scope, lambda {#your code here}
end
end
所以你唯一需要改变的是
YourModule::Platform.your_scope
答案 1 :(得分:0)
在任何操作之前,在类的顶部,你可以只创建一个别名。
NewPlatform = ActiveRecord ::
只需在该类的操作中使用别名即可避免名称空间冲突。