7

NoMethodError:#User:0x000055ce01dcf0a8 的未定义方法“current_sign_in_at”

我认为这是某种会话方法错误

我有一个用于前端的 angular6 应用程序和用于后端的 rails,所以对我来说最好的选择是选择 devise_token_auth 和 ng_token_auth 进行用户身份验证。

我安装了 devise_token_auth gem,然后在终端中执行这行代码

“rails 生成 devise_token_auth:安装用户身份验证”

在迁移时出现错误,我通过添加解决了这个问题

“扩展设计::模型”

到 USER 模型,然后迁移工作,然后我在后端创建了一个用户并尝试使用邮递员调用 sign_in 并出现错误“NoMethodError:未定义的方法 `current_sign_in_at' for #User:0x000055ce01dcf0a8”

我希望用户使用此 gem 或其他一些 gem(如果存在)进行身份验证

4

2 回答 2

22

我最近遇到了这个问题,结果我的迁移中没有可跟踪的字段。有两种方法可以解决此问题:

选项一。添加将可跟踪字段添加到用户的新迁移

## Trackable
t.integer  :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.inet     :current_sign_in_ip
t.inet     :last_sign_in_ip

运行 rake db:migrate

第二种选择:运行向下迁移

从此命令开始 - 添加您的迁移版本号

rake db:migrate:down VERSION=xxxxxxxxxxxxxx

然后,您应该能够将可跟踪字段添加到迁移文件中,然后运行

rake db:migrate up VERSION=xxxxxxxxxxxxxx

运行 rake db:migrate

于 2019-05-31T14:15:18.333 回答
1

@olivrg 建议运行迁移以将可跟踪字段添加到User模型中,这对我有用。

我的迁移看起来像这样:

class AddTrackableFieldsToUser < ActiveRecord::Migration[6.0]
  def change
    change_table :users do |t|
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.inet     :current_sign_in_ip
      t.inet     :last_sign_in_ip
    end
  end
end
于 2019-09-22T06:17:48.203 回答