如何将可跟踪功能添加到现有的Devise设置中



我正在尝试使用Devise gem获取RoR应用程序中的最后登录日期时间。在我的一个迁移文件中,我注意到# 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

所以问题是:如何激活这个字段,让我的用户稍后能够在我的应用程序中调用它?我应该取消注释吗?

首先,您需要生成一个新的迁移:

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属性。

最新更新