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
方法是导致错误的原因。删除它后,一切正常。现在我需要弄清楚为什么该方法会抛出错误。
database_authenticable
模块有一个名为
password_digest
的方法,它接受参数并使用 bcrypt 对密码进行哈希处理。现在,我在数据库中有一个现有的
password_digest
列,这是我之前使用的 ActiveRecords 的
has_secure_password
所需要的。 因此,该方法在没有参数的情况下被调用,因此抛出错误:
ArgumentError (wrong number of arguments (given 0, expected 1))
。我进行了迁移以删除
password_digest
列,但显然它在某个时间点失败了,我必须删除该列才能使事情正常进行。我希望它可以帮助任何面临类似问题的人。