LoginSignup
13
10

More than 5 years have passed since last update.

deviseの導入ですでにあるモデルに追加する場合

Posted at

新規に作成したプロジェクトへのdeviseの導入は以下を参照してください。
https://github.com/plataformatec/devise#getting-started

deviseの導入ですでにあるモデルに追加する場合

すでにあるモデルにdeviseを導入する場合

今回はUserモデルがすでにあり、そこにdeviseを適用する。

導入前

db/schema.rb
  create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.string "email"
    t.string "password"
    t.string "userName"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false

導入手順

基本的には新規モデルの作成時と変わらないの3. deviseのインストールまでは新規導入手順と同じ

  1. Gemfileにdeviseの追加
  2. bundleのインストール
    1. bundle install
  3. deviseのインストール
    1. bin/rails generate devise:install
  4. deviseでモデルの作成
    1. bin/rails g devise User
  5. マイグレーションファイルの編集
  6. データベースのマイグレーション
    1. bin/rails db:migrate

以降は通常のdevice導入後と変わらないはず。。。

deviseでモデルの作成

コマンドはdeviseでモデルの作成と同じ。
テーブルの新規作成か変更かはrailsが判定してくれる。

マイグレーションファイルの編集

今回追加されるカラムはマイグレーションファイルを見れば分かる。
この中ですでにあるものがあるとマイグレーションに失敗するのでそれを取り除く。
今回はemail
passwordも取り除く必要があるかと思ったが、encrypted_passwordだったので、とりあえずなにもしない)

20180805072136_add_devise_to_users.rb
# frozen_string_literal: true

class AddDeviseToUsers < ActiveRecord::Migration[5.2]
  def self.up
    change_table :users do |t|
      ## Database authenticatable
#      t.string :email,              null: false, default: "" # 不要なのでコメントアウト
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Confirmable
      t.string   :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at
      t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      # Uncomment below if timestamps were not included in your original model.
      # t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
    add_index :users, :confirmation_token,   unique: true
    # add_index :users, :unlock_token,         unique: true
  end

  def self.down
    # By default, we don't want to make any assumption about how to roll back a migration when your
    # model already existed. Please edit below which fields you would like to remove in this migration.
    raise ActiveRecord::IrreversibleMigration
  end
end
13
10
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
13
10