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