rails NameError: uninitialized constant?? Devise入れたらおかしくなったときの対処法
deviseを入れてからおかしくなったので解決法。
このようなエラーが出る。
NameError: uninitialized constant User
rails c
rails s
もできなくなる??
routesの
devise_for :users
を削除するとサーバーが起動する。
原因は
デバイスをインストールしていないのに
こちらがインストールコマンド rails g devise:install
デバイスでuserテーブルを作ってしまったようだ。
rails g devise user
これにより、ルーティングにはdeviseが記載され、おかしな挙動になりrailsコマンドが利用できなくなる。
対処法はこちらにあった
この記事ではより、初心者向けに理由を説明したい。
1-routes.rbにあるdevise_for :usersというコードを削除する
これがあるとルーティングがおかしくなるからか、railsコマンドが利用できない。
上記のNameError: uninitialized constant User のエラーが出る。
2-マイグレーションファイルをロールバックする。
Railsは、DBのバージョン管理がデフォルトで利用できる。それがマイグレーションファイル。
テーブルの操作をするときは、マイグレーションファイルを生成して、実行する。
このマイグレーションファイルのバージョンを持っているので、マイグレーションファイルをそのまま削除すると
厄介なことになる。
それで
rake db:rollback
でロールバックと言って、マイグレーションファイルのバージョンを戻す。 それから、userテーブルを作ったときの、マイグレーションファイルを削除する。
3-usrモデルを削除する
rails d model user
このuserモデルをdeviseをインストールしていないのにdeviseで生成したのがすべての間違いのはじまり。
よってここまで戻ってからdeviseをインストールする。
rails g devise:install
めでたし、めでたし