require
再ロード可能な定数を含むファイルをロードしようとするときは使用しないでください。
通常、その定数を使用できるようにするために特別なことをする必要はありません。定数を直接使用するだけで、require
何も使用する必要はありません。
ただし、コードをきしむようにきれいにしたい場合は、これらのファイルをロードするために使用できる別のActiveSupport
方法を提供します: .require_dependency
require_dependency 'test_service'
class IndexController < ApplicationController
...
end
きしむようにきれいになり、 ...TestService
を含むファイルを明示的にロードするが、ApplicationController
...を含むファイルを明示的にロードしないことは混乱を招きますが.
構成を変更する必要はありませんautoload_paths
。
更新 1
Rails が定数 (クラスとモジュール) を見つけてロードできるようにするには、次の手順を実行する必要があります。
アプリケーション内のすべてのリロード可能な定数が正しいファイル名のファイルにあることを確認する必要があります。ファイルは、またはまたはその他のサブディレクトリapp
など、常に のサブディレクトリにある必要があります。定数の名前が の場合、ファイル名は で終わる必要があります。app/models
app/services
TestService
test_service.rb
アルゴリズムは次のとおり"TestService".underscore + ".rb" #=> "test_service.rb"
です。
filename_glob = "app/*/" + the_constant.to_s.underscore + ".rb"
したがって、定数がTestService
の場合、グロブはapp/*/test_service.rb
です。したがって、後者は悪い形式ですが、定数を貼り付けることは、 app/services/test_service.rb
will と同様に機能します。app/models/test_service.rb
定数が の場合SomeModule::SomeOtherModule::SomeClass
、ファイルを に配置する必要がありますapp/*/some_module/some_other_module/some_class.rb
。