Ruby on rails 将gem类放入命名空间
我在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模块命名名称空间?我不想重命名我的电子邮件类 我不想重命名电子邮件类 但这是你必须要做的。你的
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迁移不是必需的,我们可以保留表名(尽管现在无法猜测,需要明确指定)。但是,我们可以用别名来代替。是的,名称空间也是一种替代迁移的选择。