2017-06-15 37 views
1

在我的Rails Gemfile中添加了一個新的寶石。它是這樣使用:將寶石類放入命名空間

Email::Client 

我有現在的問題是,我也有我的Rails應用程序一類叫做Email。現在,有時候,當我嘗試初始化它,我得到以下錯誤:

Email.new # >> undefined method 'new' for Email:Module 

可能是因爲Email是在創業板Module。我該如何解決這個問題?有沒有辦法命名空間的寶石模塊?我不想重命名我的電子郵件類。

回答

1

I don't want to rename the Email-Class.

然而,這是你必須要做的。你的代碼是你控制的唯一東西。重命名/別名(MyEmail)或名稱空間(MyApp::Email)。

順便說一句,你這次輕鬆了。想象一下,如果另一個Email也是一個班級,會發生什麼。突然間,你所有的方法都消失了。您添加或更改方法,並且您的電子郵件沒有看到它。這可能會造成令人沮喪的調試會話。

+0

gemfile中的'require:false'或初始值設定項中的'EmailModel = Email.dup'會有幫助嗎? https://stackoverflow.com/a/4140516/6548745 –

+0

'require:false'只會推遲問題。該寶石將被要求_eventually_(否則爲什麼包括它),並會導致名稱衝突_then_。不知道你的'dup'提案,它是什麼?你可以簡單地用EmailModel = Email來替代別名,但是如果我們這樣做,爲什麼不去重命名模型呢? –

+0

我編輯分享參考,如果別名工程然後是不是比遷移更好? –