【Rails】uninitialized constant UsersController というエラーが出たときの対処法


Railsでuninitialized constant UsersController が出ただと?

ある日、Railsアプリを作っていると、

uninitialized constant UsersController

という狂ったエラーが出現。

 

 

コントローラーを作り、後はuserテーブルの受け入れ体制を整えるぞ、という段階で発生したエラーでした・

このエラーを直訳すると、

初期化されていない定数User Controller

ですね。

この文を見る限りUserコントローラーが原因らしかったのですが、厄介なことに、

具体的なエラー箇所が示されず!!

 

 

いくらエラー画面でスクロールしても、ルーティングの情報が出てくるだけ。

エラーを直しにも直せないので思わず天を仰いだそのとき、です。

突如、このエラーの原因、そして解決策をひらめいたのですよ。

 

エラーの原因

原因はずばり

コントローラーの命名ミスです。

エラーの中に書いてあるコントローラー名は

UsersController

でUserが複数形になって

Users

となっているはずです。

 

一方、僕が作ってしまったコントローラーを見ると、

圧倒的に単数形のUser。

user_controller.rb

 

こ、原因はこれかよ!?

 

ご存知の通り、Railsでは命名ルールが厳しく、

コントローラー、テーブルの命名は複数形

と決まっています。逆に、モデルの名前は単数形にしなければならず、このルールを乱すことは王子だろうが姫だろうが許されません。

例えば、usersテーブルのコントローラーだったら、

users_controller.rb

にしないといけないのです。

今回の「uninitialized constant xxx Controller」と言うエラーは

Railsの単数・複数の命名ルールを無視すると出てしまうようです。

 

エラーの解決策

「あっ、コントローラーの名前が悪いの?」

「じゃあコントローラーの名前を変えようぜ」

と思って、ただ単にuser_controller.rbusers_controller.rbに変更してもダメです。

名前だけ修正してしまうと、

もっとやばいエラーが出現することでしょう笑

 

なぜなら、Railsではコントローラー作成時に、コントローラー以外のファイルも同時に生成しているからです。

たとえば、user_controller.rb$rails g controllerでミスコマンドで作ると、

  • user_helper.rb
  • user.coffee
  • user.scss

などが誕生します。

したがって、コントローラー作成時の命名ミスはコントローラーのファイル単体の改名だけではなく、影響は複数のファイルに及んでいるのです。

 

「えっ、じゃあどうすればいいの!?」

と若干、苛立ってきた方、ご安心ください。じつはRailsには、

コントローラーを削除する命令を下せるコマンドライン

が存在しています。

こちらの神記事によると、

を発動すると、コントローラー作成で作ってしまった複数のファイルをごそっとなかったことにできます。

 

このコマンドラインで間違った名前のコントローラー周りのファイルをまっさらな状態にし、お手数ですが、再び正規の名前でコントローラーを作り出す、方法が解決策です。

 

ぼくと同じようにコントローラーのネーミングミスをしてしまった時は、

単に名前を変えるだけではなく、コントローラー関連ファイル群を削除してから作り直してみてくださいね。

 

それでは!

Lin

Pocket
LINEで送る

コメントはこちらからお願いします!



もう1本読んでみる