4

使用默认 --api 标签在 rails 5 中创建了一个新 API,并使用 command 安装了 devise_token_auth gem rails generate devise_token_auth:install User auth。在做的时候rake:db:migrate,我得到了这个undefined method 'devise' for User (call 'User.connection' to establish a connection)很奇怪的错误,因为 devise_token_auth 是建立在设计之上的。

因此,注释掉路由会向包含的 user.rb 文件抛出错误

devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable,:omniauthable include DeviseTokenAuth::Concerns::User

注释掉这些行之后,它会向应用程序控制器抛出错误,其中包含: include DeviseTokenAuth::Concerns::SetUserByToken 注释掉这一行之后,我得到了 devise:orm 错误。

还尝试将设计添加到 gemfile 并为用户安装设计,这也失败了,再次抛出此错误undefined method 'devise' for User (call 'User.connection' to establish a connection)

预期的迁移经历,

获取设计错误

应该怎么做才能解决这个问题?

PS-这是我使用 Devise_token_auth gem 制作的第三个 API,之前没有遇到过这个问题

4

3 回答 3

7

这是一个设计问题,ActiveRecord ORM 是硬编码在 gem 中的,之前已更改。这可以通过创建和添加设计初始化程序来解决,如以下文档中所述。

https://devise-token-auth.gitbook.io/devise-token-auth/config/initialization

还有另一种解决此问题的方法,即在您的 user.rb 模型文件中添加以下内容。

extend Devise::Models

devise_token_auth 中还有一个未解决的问题

https://github.com/lynndylanhurley/devise_token_auth/issues/1276

您可以在哪里跟进此问题/添加您的想法以解决此问题。

于 2019-04-11T09:43:23.933 回答
2

您是否执行了以下步骤 -

将 gem 包含在gemfile-

gem 'devise_token_auth'

运行生成器:

rails generate devise_token_auth:install User auth

检查是否在User模型中添加了以下行:

include DeviseTokenAuth::Concerns::User

检查是否添加了以下行Application controller

include DeviseTokenAuth::Concerns::SetUserByToken

检查是否添加了以下行routes.rb

mount_devise_token_auth_for 'User', at: 'auth'

添加extend Devise::Models用户模型

rake db:migrate

您可以尝试删除 devise ,devise_token_auth gem 并尝试这些步骤吗?让我知道是否弹出任何错误。

于 2019-04-11T09:05:19.517 回答
0

我收到了这个错误,这对我来说是一个修复。

1) 在 Gemfile 中添加“devise_token_auth”gem。

2)运行rails g设计:安装

3) 运行 rails generate devise_token_auth:install User auth

4) 运行 rails db:migrate

于 2019-08-04T08:53:47.500 回答