もっと仲良くなりましょうdeviseさん!


みんな大好きdeviseさんともっと仲良くなりたい
今日は基本的な使い方とよく起こりうるエラーを組み合わせてまとめます

deviseとは

Railsを扱う場合、ログインまわりの機能はdeviseというGemを使用することで簡単に実装できます!これを使わない手はない。

deviseのGemをインストールしてみよう!

手順は以下です
1. Gemファイルの最終行に「gem "devise"」を追記する
2. ターミナルにてカレントディレクトリを確認した後、$ bundle installコマンドを実行する
3. $ rails s コマンドでサーバーを立ち上げ直す

ここでよく見かけるエラー1
Gemをインストールした後は、サーバーを立ち上げ直さなければいけません!なぜならインストールしたGemは、サーバーを立ち上げたときに反映されるからです。
つまりサーバーの立ち上げを行わない場合は、エラーが発生してしまいます
例えば、deviseをインストールしているのにも関わらず、No Method Errorでundefinde method "usder_signed_in?"が出てきてしまう時などです。注意しましょう!

deviseの設定ファイルを作成しよう!

設定ファイルを作成するためには、$ rails g devise:installコマンドを実行します
作成されるファイルは以下です!
- config/initializers/devise.rb
- config/locales/devise.en.yml

ここでよく見かけるエラー2
$ rails g devise:installコマンドを実行せずに、次の手順"Userモデルを作成するためのコマンド $ rails g devise userの実行"に進んでしまうと、エラーが発生します!
それが、ターミナルでrailsを含むコマンドを打とうとするときです。

例えば、$rails routesを実行すると・・・
NoMethodError: undefined method 'devise' for User(call 'User.connection' to establish a connection)というようなエラー文が表示されます
でも大丈夫!
こんな時は、以下の手順で解決しましょう
1. config/routes.rbファイルに自動的に記述された「devise_for :users」をコメントアウトする
2. ターミナルにて$ rails g devise:installコマンドを実行する
これで解決できるはずです!

アカウントを作成するためのUserモデルを作ろう!

手順は以下です
1. $ rails g devise userコマンドを実行
2. $ rails db:migrateコマンドで、マイグレートを実行

ここではマイグレーションファイルが作成されることに注目しましょう
- app/models/user.rb →Userモデル
- db/migrate/2014XXXXXXXXXX_devise_create_users.rb →ログイン機能に必要なカラムが追加されるマイグレーションファイル
- test/fixtures/users.yml
- test/models/user_test.rb

また、$ rails g devise userコマンドを実行することで、config/routes.rbファイルにdevise用のルーティング(= devise_for :users )が自動で追加されることもポイントです

ここでよく見かけるエラー3
よーし!ここで一度サーバーを立ち上げなおしてみよう!そう思って実行したところ、PendingMigrationErrorが出てしまった...なんてことありませんか??
でも焦らない!そんな時は以下の方法で解決しましょう
1. migrate の実行がされているのか確認
$ rails db:migrateコマンドを実行し忘れていないか
2. おっと、migrateを実行しようとしたら、次は新しいエラーが出たぞ!Myaql2::Error:...
$rails db:migrate:statusコマンドでステータスを確認してみる
3. down状態のファイルが見つかった!
→間違って2度$ rails g devise userコマンドを実行してしまった可能性あり!
→down状態のAdd devise to usersというマイグレーションファイルを削除する
これで解決だ!!

まとめ
私たちがPCの中の構造まで理解せずとも使用できるように、deviseは非常に便利な反面、少し複雑な構造をしているようですね!
しかしログイン機能の実装は、
1. deviseのGemをインストール
2. deviseの設定ファイルを作成
3. deviseコマンドを使ったUserモデルの作成

以上の手順を踏めば簡単に行うこともわかりました