【解決方法】undefined method 'devise' for User:Class とは？

Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。
アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。少しでも参考にしていただけると幸いです。
今回はundefined method 'devise' for User:Classというエラーの解決方法をお話しします。


## 1、今回のエラー画面はこれです
![スクリーンショット 2023-07-07 6.56.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/6d212d5a-c6eb-e571-a628-f1f6b8a7ece3.png)
今回はuserテーブルをdeviseを使ってuserテーブルに同時にdeviseも書き入れようとしました。下記の画像のように`rails generate devise User`を作ろうとした際に起きたエラーを解決していきます。
![スクリーンショット 2023-07-07 6.27.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/28c12b79-1a55-3bd8-9453-fe96b5f49fab.png)




## 2、結論はこちら
![スクリーンショット 2023-07-07 6.59.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/616a45ca-dfd1-ed03-a201-14ccccad9aab.png)
と言うことで、model > user.rb と言うモデルを作成していたのですが、その中の記載に `extend Devise::Models`と言う記述をすることで解決できました。
その解決プロセスについて話してみたいと思います。


## 3、実装したかったもの
今回のエラーになったところでは下の画像のようにdeviseを入れてからTweetsテーブルを作成しようとしましたが、その際に`rails db:migrate`が実行できませんでした。（ターミナルの画像のように`rails aborted!`と表示されてしまいます。
![スクリーンショット 2023-07-07 6.27.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/6dd3d0b6-9d0a-f03e-14b6-8786b8763d06.png)
![スクリーンショット 2023-07-07 6.33.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/d4291ad3-ac93-fbfd-3bc1-5b7ca4fa1dd1.png)

![スクリーンショット 2023-07-07 6.30.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/c7b27d05-2cf6-4194-cff0-670176d134fe.png)
実は上記の手順に問題がありました。実際にはuserテーブルを先に作らないとtweetsテーブルはマイグレーションされませんでした。
この、マイグレーションができないエラーを解決してしていきます。


## 4、ChatGPTにエラーの原因を聞きます
![スクリーンショット 2023-07-07 6.33.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/2b6b6e3d-4b9f-cd1d-9ce7-15e82824ebd3.png)
まずは上記画像の上から三行のところに『ユーザーを作らないといけない』と言うことが分かります。
次に、tweetsテーブルにuserテーブルの参照を行う設定として`belongs_to :user`が定義されていました。
なので、この上記の画像の助言の通りuserテーブルを作ります。userテーブルはdeviseと同時に作りたかったので、 `rails generate devise User`と言うコマンドで、userテーブルを作っていきます。
この順序で行うとtweetsテーブルの方が先に読み込まれるようになってしまうので、userテーブルが先に来るようにファイル名の数字をいじりました。
![スクリーンショット 2023-07-08 5.36.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/3862d81a-559d-e02b-ef6a-261338a75951.png)
これでuserテーブルが読み込まれ、後からtweetsテーブルが読み込まれるようになるのでマイグレーションがうまくいくと書いてあります。


## 5、上記で解決しない場合。
上記のようにマイグレーションファイルの順序を入れ替えて`rails db:migrate`をしてもマイグレーションができない場合には他にも行うことがあります。
それは`extend Devise::Models`を入力すると言うことです。
![スクリーンショット 2023-07-08 4.58.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/a75d0b69-617e-ceb1-1a71-6f561edb76fd.png)
これはQiitaの別の記事を参考にしました。ユーザーモデルにextend Devise::Modelsを入力してマイグレーションをかけると完了します

このようにターミナルから完了したことが確認できます。
![スクリーンショット 2023-07-07 6.44.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/d1a86359-71ec-7c17-5e5d-c54b0395ab5b.png)

ターミナルでマイグレーションができたことが確認できたので、モデルとコントローラーとビューを記述してブラウザを表示させてみると↓
![スクリーンショット 2023-07-07 6.59.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/0411473d-dbb9-ca81-0eda-24dd0675bf98.png)
と、このようにエラー画面が消えました。
じゃあ、このextend Devise:Modelsってなんだったんだ？


## 6、extend Devise:Modelsとは？
この`extend Devise:Models`とは何か？これについてもChatGPTに聞いておきました。
![スクリーンショット 2023-07-07 6.59.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/eb1be542-5ac8-1fa4-1f93-f0a3415ebe2c.png)

と言うことで、最後の段落にも書いてありますが、明示的に書く必要はなく、本来はいらないコードで、何かの動作に問題があったので、記述した。と言うことなので、イレギュラーに対処したということになります。
この先、コードを追加して行った時に、このextend Devise:Modelsが他と干渉しなければいいなと不安な部分もありましたが、先に進むことにします。


いかがでしたでしょうか？
他にも記事を発信していきますので、私の QiitaやTwitterをフォローしていただけると嬉しいです。
個別の質問もぜひ歓迎します。
私自身、初学者ではありますが、1歩先を行くものとして回答できたらと思います。
それでは。