これはなにか
Railsをそれなりにやっているにも関わらず、uninitialized constant error にハマってしまったのでチェックリストをここにまとめておこうと思う。
結論
チェックするべき項目は以下3点である。
- ファイル名とclass名が一致しているか?
- ファイルpathとmoduleの定義が一致しているか?
- Railsにファイルを読み込ませているか?
以下詳細をかいていく。
ファイル名とclass名が一致しているか?
以下のようなclassが存在していたら、ファイル名はqiita_user.rb
でないといけない。
class QiitaUser
def hoge
end
end
ファイルpathとmoduleの定義が一致しているか?
以下のようなmoduleにnestされたclassが存在していたら、pathは **/v1/auth/user.rb
のようになるだろう。
class V1::Auth::User
end
OR
module V1
module Auth
class User
end
end
end
Railsにファイルを読み込ませているか?
Railsのデフォルトのフォルダ以外に、フォルダを追加する場合、autoload pathに追加したフォルダへのpathを定義する必要がある。
app/lib/hoge/foo.rb
を追加したとする。この場合、config/application.rb
に以下の様な形で、autoload pathを追加する必要がある。
module App
class Application < Rails::Application
# 省略
config.autoload_paths += Dir.glob("#{config.root}/app/lib")
end
end
twitterもフォローよろしくおねがいします。 !