Arale

アパレル、バリスタを経て未経験からのプログラマーになった男の勉強ログ

deviseに関してのアウトプット

deviseとは?

ユーザー管理機能を簡単に実装するためのGem.

ログイン機能を1から構築するのが大変なため、deviseを使用して簡単に実装しよーよ!ということは私を含めてご存知な方は多いと思います。

たくさん使ってきましたが、色々と実装を進めていく中であまり理解をしていないことに気づきました。

自分でも分かりやすいように今回はまとめたいと思います。

どのような機能が実装できるか

  • サインアップ機能
  • サインイン機能
  • アカウント編集機能
  • パスワード変更機能
  • メール認証機能
  • アカウント凍結機能

凍結までできるのですね、これは知りませんでした。

導入手順

  • gem 'devise' (Gemfileに記述)
  • bundle install (ターミナルでディレクトリがdeviseを導入したいアプリで)
  • rails s (インストールしたGemを反映させるため)
  • rails g devise:install (deviseの設定ファイルを作成)
  • rails g devise user (Userモデルを作成)
  • rails db:migrate (必要なテーブルを記述してから実行)
  • rails s (テーブル・カラムに変更があった場合)
  • rails g devise:views

ここで意外だったのが、コントローラーは特別いらないこと。

今回実装しているアプリはコントローラーがいらなかったのです。

調べてもよく出てこなかったのですが、deviseに元々備わっている機能だけでアクションのようなものも付随しているってことなのかな。

元々備わっているもの

今回はマイグレーションファイルに関してだけの説明です。

t.string :email,               null: false, default: ""
t.string :encrypted_password,  null: false, default: ""

マイグレーションファイルを確認すると. 既に記述がある項目の一つです。

アプリを開発する上でemailに一意性制約を用いたいと思い. Userモデルのバリデーションに記述しました。

validates :email, uniqueness true
#混同しやすいですが、uniqueはマイグレーションファイルに使用

本当は他にも色々記述してますが.

このように記述をしました。

が、結論 要りませんでした。

deviseのemailには一意性制約がデフォルトであるため. 要りません。

deviseにより自動的に含まれているバリデーション

  • email

    • 存在すること
    • 一意であること
    • @を含むこと
  • password

    • 存在すること
    • 6文字以上128文字以下であること

今回はモデルに記述した箇所を削除して. f:id:Arale:20211231105938p:plain エラー文の重複に悩んでましたが、解決しました。

参考にしたサイト

qiita.com