自作のクラスやモジュールを読み込む場合、 Rails4だと
---
config.autoload_paths += %W(#{Rails.root}/lib)
---
みたいなのをconfig/application.rbに設定したかと思いますが、
Rails5ではこれを記述するとエラーが出ます。
■対応策 A案
app配下は自動で読み込まれるため、そこに自作クラスを置く。
(app配下にあるとわかりやすい&挙動調べるときはまずここを見るかと思いますので
個人的には素直にここが最適かと思います)
以下、設定例
[app/lib/foo_bar.rb] libフォルダとfoo_bar.rbは自分で作る
class FooBar
def hi
return "hi."
end
def bye
return "Good bye!"
end
end
[app/controllers/users_controller.rb] 例のためcontrollerかましています
def index
@foo = FooBar.new
end
[app/views/users/index.html.erb]
<%= debug @foo.hello %> #=> hi
<%= debug @foo.bye %> #=> Good bye!
■対応策 B案
任意の場所libフォルダとかに自作クラスを置いてrequireで読み込む。
以下、設定例
[lib/hoge.rb] foo_bar.rbは自分で作る
class Hoge
def hey
return "hey there."
end
end
[app/controllers/users_controller.rb] 例のためcontrollerかましています
require './lib/hoge'
def index
@hoge = Hoge.new
end
[app/views/users/index.html.erb]
<%= debug @hoge.hey %> #=> hey there.
■対応策 C案
Rails4みたいにautoloadする設定を入れる。
Rails5のproduction環境でlib/配下のクラス読込みがNameErrorになるのはautoloadが無効化されたからだった
■参考サイト
・Rails 5 ignoring /lib class?
上記の回答では、config/application.rbでrequireしろ、という内容です
・Railsアプリのモジュールはどこに置くべきか問題 (公開版)
・読み込むための命名規則(ファイル名、設置場所に伴うクラス名・メソッド名)が厳密に定義されているので要注意