概要

Rails6 と 認証用の gem である Devise を使ったログイン時刻の記録方法を書き留めています。

使用したバージョン:
Rails 6.0.2.2
Devise 4.7.1

プロジェクトの作成

まずは適当な名前で Rails プロジェクトを作成します。

rails new myproject
cd myproject

Devise のセットアップ

次に Devise の設定を行なっていきます。

Gemfile を開いて以下を追記し、bundle install を実行してください。

# ...略
gem 'devise'

インストールが終わったら User モデルを作成します。

bin/rails g devise:install
bin/rails g devise user

User モデルの編集

ログイン時刻を記録する機能はデフォルトでは有効になっていません。
有効にするために先ほどの手順で生成された User モデルやマイグレーションファイルを編集していきます。

まずは User モデルのファイルを開き、devise メソッドの引数に :trackable を追加します。

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable, :trackable
end

さらに、マイグレーションファイル XXX_devise_create_users.rb を開きます。
15 行目くらいにあるコメントアウトを外します。

class DeviseCreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      # ...略
      ## 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

      # ...略
    end
  end
end

すべて終われば、bin/rails db:migrate で完了です。