TestControllerでTestServiceを読み込もうとしたところ
NameError in TestController#regist
uninitialized constant TestController::TestService
エラーとなってしまいます。
エラー画面では以下場所が赤背景となってました。
service = TestService.new("test1")
TestServiceが読み込まれていないと思い。
config/application.rbに
config.autoload_paths += %W(#{config.root}/lib)
を追加したところエラーがでなくなりました。
しかし、
TestServiceはapp/services/test_service.rbにあり
プロジェクト直下のlibとは関係がありません。
autoload調査コマンドを打ったところ以下が出力されました。
$ bundle exec rails r 'puts ActiveSupport::Dependencies.autoload_paths' /~/app/assets /~/app/channels /~/app/controllers /~/app/controllers/concerns /~/app/helpers /~/app/jobs /~/app/mailers /~/app/models /~/app/models/concerns /~/app/services /~/test/mailers/previews
app/servicesのpathが入っていたのでautoload対象であることがわかりました。
疑問なのが、どうしてconfig.autoload_paths += %W(#{config.root}/lib)を
記述したところ表題のエラーが消えるのかということです。
エラーの対策として、上記コードの記述がどうしても腑に落ちなかったので
質問させていただきました。
*version
Rails 5.1.4
ruby 2.4.2
unicorn:development

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/09 02:14