ruby-on-rails - 如何将 trackable 添加到现有的 Devise 设置中?

标签 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

所以问题是:如何为我的用户激活此字段以便稍后在我的应用程序中调用它?我应该取消注释吗?

最佳答案

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

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

关于ruby-on-rails - 如何将 trackable 添加到现有的 Devise 设置中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53024228/

相关文章:

ruby-on-rails - 从 Engine 类访问 url_helper

mysql - 相关元素的 ActiveRecord 查询

ruby-on-rails - ruby rails : Problem adding Transient Attribute to Object for JSON Serializaton

ruby - 如何在 Ruby 中删除数组的末尾

ruby-on-rails - 如何在不使用身份验证的情况下使用 rails 中的设计获取当前用户!在 Controller 上

ruby-on-rails - before_filter:authenticate_user !,除了:[:index]/Rails 4

ruby-on-rails - :tls => true do in SMTP settings in Rails 5? 是什么意思

javascript - 在javascript中检测浏览器字符支持?

ruby-on-rails - 在gentoo上安装gitlab

ruby-on-rails - 未定义的方法 `env' 为 nil :NilClass