2017-06-15 6 views
1

私のRails Gemfileに新しい宝石を追加しました。gemクラスを名前空間に入れよう

Email::Client 

私が今抱えている問題は、私もEmailと呼ばれています私のレールのアプリでクラスを持っていることです。それは、このように使用されます。私はそれを初期化しようとすると、今、時々私は次のエラーを取得する:

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

おそらくEmailためには宝石でModuleです。この問題を解決するにはどうすればよいですか?宝石モジュールの名前空間を作る方法はありますか?私は自分のEmailクラスの名前を変更したくありません。

答えて

1

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

これはあなたがしなければならないことです。あなたのコードはあなたがコントロールする唯一のものです。名前の変更/エイリアス(MyEmail)または名前空間のit(MyApp::Email)。

ところで、あなたは簡単にこの時間を降りました。他のEmailもクラスであれば、どうなるか想像してみてください。突然、あなたのすべての方法はなくなりました。メソッドを追加または変更すると、電子メールにメソッドが表示されません。これは、イライラするデバッグセッションのためにすることができます。

+0

は '必要です:初期化子でgemfileでfalse'を、または' EmailModel = Email.dup'は役立つだろうか? https://stackoverflow.com/a/4140516/6548745 –

+0

'require:false'は問題を遅らせるだけです。宝石は_eventually_(それ以外の理由でそれをすべて含める必要があります)、名前の衝突_then_が発生します。あなたの 'dup'プロポーザルについては不明ですが、それは何のためですか?単に 'EmailModel = Email'でエイリアスすることもできますが、それを行うと、単にモデルに行って名前を変更するだけです。 –

+0

参照を共有するように編集しました。エイリアシングが機能する場合は、移行よりも優れていませんか? –

関連する問題