Railsでuninitialized constant UsersController が出ただと?
ある日、Railsアプリを作っていると、
uninitialized constant UsersController
という狂ったエラーが出現。

エラーを直訳すると、
初期化されていない定数UsersController
ですね。
文を見る限りUsersコントローラーが原因らしかったのですが、厄介なことに、
具体的なエラー箇所が示されず!!

エラーを直したくても直せないので、思わず天を仰いだそのとき、です。
突如、このエラーの原因、そして解決策をひらめいたのですよ。
エラーの原因
原因はずばり
コントローラーの命名ミスです。
エラーの中に書いてあるコントローラー名は
UsersController
でUserが複数形になって
Users
となっていました。
一方、僕が作ってしまったコントローラーを確認すると、単数形のUserで、
user_controller.rb
だったのです。
こ、原因はこれかよ!?
ご存知の通り、Railsでは命名ルールが厳しく、
コントローラー、テーブルの命名は複数形
と決まっています。
逆に、モデルの名前は単数形にしなければならず、このルールを乱すことは許されません。
例えば、usersテーブルのコントローラーだったら、
users_controller.rb
にしないといけないのです。
今回の「uninitialized constant xxx Controller」というエラーは
Railsの単数・複数の命名ルールを無視したら出てしまったようです。
エラーの解決策
「あっ、コントローラーの名前が悪いの?」
「じゃあコントローラーの名前を変えようぜ」
と思い立ち、単にuser_controller.rbをusers_controller.rbに変更してもダメです。
名前だけ修正してしまうと、
もっとやばいエラーが出現することでしょう笑
なぜなら、Railsではコントローラー作成時に、コントローラー以外のファイルも同時に生成しているからです。
たとえば、user_controller.rbを$rails g controller userで作ると、
- user_helper.rb
- user.coffee
- user.scss
などが誕生します。
したがって、コントローラー作成時の命名ミスは、ファイル名だけではなく、影響は複数のファイルに及んでいるのです。
「えっ、じゃあどうすればいいの!?」
と若干、苛立ってきた方、ご安心ください。じつはRailsには、
コントローラーを削除できるコマンドライン
が存在しています。
こちらの神記事によると、
1 |
$ rails destroy controller user |
を発動すると、「userコントローラー」と一緒に作ったファイルごとゴソっと削除できるようです。
その後にもう一度「正しい名前のコントローラー」を作り直してみましょう。
それでは!
Lin

おそらく、ブロガー。現在ホテル暮らしで全国フラフラしています。
ネット広告代理店に1年3ヶ月勤め上げ、独立をして丸4年が経ちました。今年でフリーランス 5年目。
質問・ご意見・相談があればLINEで受け付けていますのでお気軽にどうぞ 。
コメントを残す