deviseでユーザ管理機能を実装
ユーザー管理機能を実装に、「devise」を使用します。
最初にインストールを行います。
手順の流れとしては、Gemファイルにインストールをする為、Gemfileに追記します。
Gemfileの一番下に追記をしましょう。
Gemfile
(前略)
gem 'devise'
(後略)
以下のように、group内に記述すると、書き方もあります。
特定の環境でのみ使用する設定になってしまいます。
deviseは開発、テスト、本番いずれの環境でも使用しますので注意しましょう。
NG例
Gemfile
group :development do # developmentは開発
gem 'devise'
end
上記に書いてある通り、deviseは開発、テスト、本番いずれの環境でも使用しますので、
この記述だとdevelopment環境のみなので、development環境から、
テストや本番環境に移行していくので、その際に対応できなくなってしまいます。
#deviseのインストールを行おう
続いてGemおよびdeviseのインストールを行います。deviseの場合は、
bundle installの他にdevise用のインストールコマンドの実行が必要なので注意します。
deviseを使用するためには、Gemのインストールに加えてdevise専用のコマンドを利用して
設定ファイルを作成する必要があります。
ターミナル
$ bundle install # gemをインストールするためのコマンドです。
$ rails g devise:install # deviseの設定ファイルを作成
deviseの機能を持ったUserモデルを作成しよう
deviseを利用する際にはアカウントを作成するためのUserモデルを新しく作成します。
作成には通常のモデルの作成方法ではなく、deviseのモデルの作成用コマンドでUserモデルを作成しましょう。
deviseで使用するモデルは、rails g devise <モデル名>コマンドで作成できます。
Userモデルの作成は、rails g devise user コマンドで作成が出来ます。
ターミナル
$ rails g devise user # deviseコマンドでモデルを作成
- 新規作成されるファイル
- app/models/user.rb
- db/migrate/20XXXXXXXXXXXX_devise_create_users.rb
- test/fixtures/users.yml
- test/models/user_test.rb
また補足として、config/routes.rbに以下の様な記述が自動的に追記されます。
config/routes.rb
Rails.application.routes.draw do
devise_for :users
#以下略
次にマイグレーションファイルを開き、t.string :name, null: false と add_index :users, :name,
unique: trueを下記の様に追記しましょう。
これで、マイグレーション実行時にnameカラムがNOT NULL制約・一意性制約付きで作成されます。
db/migrate/マイグレーションファイル
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false # 追記する
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
# 〜省略〜
end
add_index :users, :name, unique: true # 追記する
# 〜省略〜
NOT NULL制約では空の文字列は保存可能なため、validatesを使用します。
更にuser.rb に validates :name, presence: trueと追記し、空の文字列の場合もエラーが発生する様にしてください。
app/models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, presence: true, uniqueness: true # 追記する
end
最後にマイグレーションを実行し、データベースに反映をさせましょう。
ターミナル
$ rails db:migrate # 作成されたマイグレーションファイルを実行
コマンドを誤った場合の対応方法
誤ったコマンドを実行してしまった場合は、以下を参考に修正を行います。
##rails gコマンドの誤り
rails g model userコマンドでファイルを作ってしまった場合は、
下記のコマンドを実行してファイルの削除を行いましょう。
ターミナル
rails d model user
マイグレーションファイルの誤り
マイグレーションファイルの記述を誤ったままマイグレートしてしまった場合は、
下記のコマンドを実行してからもう一度やり直します。
ターミナル
rails db:rollback