私はモデル、コントローラなどに属さないカスタムクラスをいくつか持っていますが、これを/ libに入れてください。Railsロードパスの質問
レール中< 3私はこのディレクトリを私のloadpathとレール3+に追加します、これを私のautoload_pathに追加します。これは正しいです?
今や、すでに定義されているクラスを拡張するいくつかのクラスがあります。私はどこにこれを起動時に実行する必要がありますか?たとえば、Stringにメソッド 'foo'を追加したいとします。
class String def foo 'foo; end end
起動時にこのクラスを定義する必要がありますか。
私が持っている別の奇妙なバグは、libの名前空間クラスにしようとするときです。コンソールでの今
module MyProject class Foo end end
:
ruby-1.9.2-p136 :004 > MyProject::Foo LoadError: Expected /Users/me/workspace/my_project/lib/foo.rb to define Foo from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:492:in `load_missing_constant' from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:183:in `block in const_missing'
私はこのエラーを取得しておきます。このファイルをロードするにはどうしたらいいですか?
バッグは実際にはタイプミスでした。まだそのエラーを取得しています。イニシャライザのように自動ロードしたいファイルはどこに置いてもかまいません。定数が定義されていない場合、Rails3がautoloadsを実行したときにRails3がautoloadを呼び出す理由を確認しない – HelpMe
autoload_pathsに加えて、autoload_once_pathsを使用すると、Railsの起動時に一度だけロードされるディレクトリを定義できます。開発中であっても、イニシャライザとautoload_only_onceパスは開発中であっても一度しかロードされないため、テストの間にコンソールやレールアプリケーションを完全に再起動していることを確認してください。 –
本当に混乱していることは、「オートロード」が本当に何かを自動ロードしないということです。クラスパスに追加するだけです。 config/initializersのすべてが実際に自動ロードされます。つまり、起動時に実行されます。 – HelpMe