我在Rails console:rails c -e production
中遇到了这个奇怪的问题,试图获取user: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的帮助,我发现devise的database_authenticable
方法是导致错误的原因。删除它后,一切都正常。
现在我需要弄清楚为什么这个方法会抛出错误。
1条答案
按热度按时间vfhzx4xs1#
好了,问题是
database_authenticable
模块有一个名为password_digest
的方法,它接受一个参数并使用bcrypt对密码进行哈希运算。现在,我在数据库中有一个现有的
password_digest
列,这是我之前使用的ActiveRecords的has_secure_password
所需要的。因此,该方法在没有参数的情况下被调用,因此抛出错误:ArgumentError (wrong number of arguments (given 0, expected 1))
。我迁移了
password_digest
列,但显然它在某个时间点失败了,我不得不删除该列以使事情正常工作。我希望它能帮助任何面临类似问题的人。