如何将可追踪性添加到现有的Devise设置中?

时间:2018-10-27 16:53:45

标签: ruby-on-rails ruby devise ruby-on-rails-5

我正在尝试使用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

所以问题是:如何激活此字段,以便我的用户以后可以在我的应用程序中调用它?我应该取消评论吗?

1 个答案:

答案 0 :(得分:7)

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

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