Как добавить отслеживаемый в существующую настройку Devise? - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь получить дату последнего входа в приложение RoR, используя гем Devise.В одном из моих файлов миграции я заметил поле # t.datetime :last_sign_in_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

Итак, вопрос: как активировать это поле, чтобы мои пользователи могли позже вызывать его в моем приложении?Должен ли я просто раскомментировать это?

1 Ответ

0 голосов
/ 27 октября 2018

Сначала вам нужно сгенерировать новую миграцию:

rails generate migration AddDeviseTrackableColumnsToUsers \
sign_in_count:integer \
current_sign_in_at:datetime \
last_sign_in_at:datetime \
current_sign_in_ip:string \
last_sign_in_ip:string

затем заменить:

add_column :users, :sign_in_count, :integer

с:

add_column :users, :sign_in_count, :integer, default: 0, null: false

Теперь файл миграции выглядит так:

class AddDeviseTrackableColumnsToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :sign_in_count, :integer, default: 0, null: false
    add_column :users, :current_sign_in_at, :datetime
    add_column :users, :last_sign_in_at, :datetime
    add_column :users, :current_sign_in_ip, :string
    add_column :users, :last_sign_in_ip, :string
  end
end

Выполнить rails db:migrate

В пользовательской модели app / models / user.rb убедитесь, что опция :trackable добавлена ​​к методу devise:

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

Включенные опции могут отличаться в вашем случае, просто добавьте :trackable, если вы его не нашли.

Теперь вы можете использовать атрибут last_sign_in_at, как и другие атрибуты.

...