3

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

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

我想知道是否有一种相对简单的方法(使用 ruby​​ 的 metamagic 或诸如此类)来防止这种命名空间冲突,而无需重命名我的类或更改实际的 gem。谢谢。

编辑:

而不是在我的应用程序中重命名/包装 Platform,并且由于该模块 Platform仅由另一个 gem 需要,我导致分叉两个 gem,重命名PlatformXPlatform(原始 gem 和导入它的那个),并重建它们. 这似乎奏效了[叹气]。

4

2 回答 2

4

如果无法更改名称时的条件是不可避免的

尝试将您的 activerecord 类包装在一个模块中

module YourModule
 class Platform < Activerecord::Base
 named_scope :your_scope, lambda {#your code here}

 end
end

所以你唯一需要做的改变就是

YourModule::Platform.your_scope
于 2012-09-12T07:22:48.363 回答
0

在任何操作之前的类的顶部,您可以只创建一个别名。

新平台 = ActiveRecord::

并且只需在该类的操作中使用别名以避免命名空间冲突。

于 2018-06-02T14:06:51.787 回答