0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-04-16

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

deviseとは

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

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

手順は以下です:pencil2:

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

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

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

設定ファイルを作成するためには、$ rails g devise:installコマンドを実行します:pencil2:
作成されるファイルは以下です!

  • config/initializers/devise.rb
  • config/locales/devise.en.yml

:warning:ここでよく見かけるエラー2:warning:
$ 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)というようなエラー文が表示されます:fearful:
でも大丈夫!
こんな時は、以下の手順で解決しましょう:point_up:

  1. config/routes.rbファイルに自動的に記述された「devise_for :users」をコメントアウトする
  2. ターミナルにて**$ rails g devise:install**コマンドを実行する
    これで解決できるはずです!

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

手順は以下です:pencil2:

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

ここではマイグレーションファイルが作成されることに注目しましょう:sparkles:

  • 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 )が自動で追加されることもポイントです:sparkles:

:warning:ここでよく見かけるエラー3:warning:
よーし!ここで一度サーバーを立ち上げなおしてみよう!そう思って実行したところ、PendingMigrationErrorが出てしまった...なんてことありませんか??
でも焦らない!そんな時は以下の方法で解決しましょう:point_up:

  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**というマイグレーションファイルを削除する
    これで解決だ!!

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?