LoginSignup
0

More than 3 years have passed since last update.

rails devise インストール

Last updated at Posted at 2020-07-06

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 

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