Rails 控制台在从特定模型获取记录时出现莫名其妙的错误

问题描述 投票:0回答:1
我在 Rails 控制台的生产中遇到了这个奇怪的问题:

rails c -e production

,尝试获取用户:
User.first
会导致以下错误:

2.7.2 :005 > User.first Traceback (most recent call last): ArgumentError (wrong number of arguments (given 0, expected 1))
从这个错误中无法弄清楚任何事情。由于某种原因,它发生

仅适用于此用户模型,对于其余模型,一切正常。

此外,无论是在开发还是生产模式下,此错误都不会出现在本地。

在此附上用户模型,供参考:

# frozen_string_literal: true class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :confirmable, :omniauthable, :validatable .... end
任何解决此问题的指示都将受到高度赞赏。

更新

经过进一步调查和 chatGPT 的一些帮助,我认为该设计的

database_authenticable

 方法是导致错误的原因。删除它后,一切正常。

现在我需要弄清楚为什么该方法会抛出错误。

ruby-on-rails rails-console
1个回答
0
投票
好吧,问题是

database_authenticable

 模块有一个名为 
password_digest
 的方法,它接受参数并使用 bcrypt 对密码进行哈希处理。

现在,我在数据库中有一个现有的

password_digest

 列,这是我之前使用的 ActiveRecords 的 
has_secure_password
 所需要的。
因此,该方法在没有参数的情况下被调用,因此抛出错误:
ArgumentError (wrong number of arguments (given 0, expected 1))

我进行了迁移以删除

password_digest

 列,但显然它在某个时间点失败了,我必须删除该列才能使事情正常进行。

我希望它可以帮助任何面临类似问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.