私は非常に奇妙なエラーがあります私は私の頭を包み込むことはできません。クラスが必要ですがアクセスできません
基本的に、私は私のlib
フォルダにこのクラスを持っている:
# lib/api/amazon.rb
module API
class Amazon
...
end
end
私はどこかでそれを使用したい場合は、私はそれをrequire
:
require 'api/amazon'
API::Amazon.do_stuff
これが最初に動作しますが、しばらくした後、それが壊れますNameError: uninitialized constant API::Amazon
を発生させます。私がこれをデバッグし、エラーが発生したときにファイルを再度require
にしようとすると、ファイルがすでにロードされたことを示すfalse
を返します。私は$"
(これはロードされたファイルのリスト)でも見ることができます。なぜAPI::Amazon
にアクセスできないのですか?
注:私は "API" を使用する必要はありません理由であるActiveSupport::Inflector
に頭字語として "API" を追加しました:
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'API'
end
はEDIT:
私は同じ、同様::API::Amazon.do_stuff
を試してみました結果。
'ActiveSupport'は時々、ネストされたクラスのいくつかのクリーンアップを実行して、dinamically createdを削除しているようです。これは、誰かが 'class_eval'のようなメソッドで動的なクラス拡張を使用する場合に必要となるかもしれません。 – mudasobwa
@mudasobwaというのは、それが何を意味するのか正確には分かりません。私は動的な 'class_eval'のものは使用しません。動的またはメタプログラミングの魔法がない通常のクラスです。 –
あなたは既に存在する(そして凍結された、[その政治](http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html))モジュールに合わせてクラスを定義します。たとえば、ActiveSupport :: Inflectorをmonkeypatchedしているとします。 'ActiveSupport'は一旦ロードされると、**それは**ネストされたクラスでそのようなクリーンアップを実行するかもしれません。 – mudasobwa