解析类和gem之间的名称空间冲突

时间:2012-09-12 06:38:27

标签: ruby-on-rails ruby namespaces rubygems conflict

在我的Rails 2.3应用程序中,我发现问题源于现有ActiveRecord模型与我最近添加的gem之间的命名空间冲突。

具体来说,我试图为应用添加jammit支持。 jammit的一个依赖宝石需要'platform',它会在应用程序的命名空间中引入Platform 模块。但是,我已经有一个具有该名称的AR ,并且重命名它将引入许多额外的工作和可能的错误。

我想知道是否有一种相对简单的方法(使用ruby的metamagic或whatnot)来防止这种命名空间冲突,而不必重命名我的类或改变实际的gem。感谢。

编辑:

而不是在我的应用中重命名/包装 Platform,而且模块 Platform只需要一个其他gem,我导致分配两个宝石,将Platform重命名为XPlatform(原始宝石和导入宝石的宝石),并重建它们。这似乎有效[叹气]。

2 个答案:

答案 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 ::

只需在该类的操作中使用别名即可避免名称空间冲突。