Ruby on rails 将gem类放入命名空间

Ruby on rails 将gem类放入命名空间,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我在Rails文件中添加了一个新的gem。它是这样使用的: Email::Client 我现在遇到的问题是,我的rails应用程序中还有一个名为Email的类。现在,当我尝试初始化它时,有时会出现以下错误: Email.new # >> undefined method 'new' for Email:Module 可能是因为Email是gem中的模块。如何解决此问题?有没有办法为gem模块命名名称空间?我不想重命名我的电子邮件类 我不想重命名电子邮件类 但这是你必须要做的。你的

我在Rails文件中添加了一个新的gem。它是这样使用的:

Email::Client
我现在遇到的问题是,我的rails应用程序中还有一个名为
Email
的类。现在,当我尝试初始化它时,有时会出现以下错误:

Email.new # >> undefined method 'new' for Email:Module
可能是因为
Email
是gem中的
模块。如何解决此问题?有没有办法为gem模块命名名称空间?我不想重命名我的电子邮件类

我不想重命名电子邮件类

但这是你必须要做的。你的代码是你唯一能控制的东西。重命名/别名它(
MyEmail
)或为它命名名称空间(
MyApp::Email


顺便说一句,你这次很轻松。想象一下,如果另一封
电子邮件
也是一个类,会发生什么。突然,你所有的方法都消失了。您添加或更改了一个方法,但您的电子邮件没有看到它。这可能会造成令人沮丧的调试会话。

require:false
在gemfile中,或者初始化器中的
EmailModel=Email.dup
会有帮助吗<代码>要求:false
只会延迟问题。最终需要gem(否则为什么要包含它),然后会导致名称冲突。不确定您的
dup
提案,为什么?您可以通过
EmailModel=Email
简单地使用别名,但是如果我们这样做,为什么不直接去重命名模型呢?我编辑了模型以共享引用,如果别名有效,那么它不是比迁移更好吗?@Md.FarhanMemon迁移不是必需的,我们可以保留表名(尽管现在无法猜测,需要明确指定)。但是,我们可以用别名来代替。是的,名称空间也是一种替代迁移的选择。