ruby-on-rails Rails控制台在从特定模型获取记录时出现无法解释的生产错误

ymdaylpp  于 2023-11-20  发布在  Ruby
关注(0)|答案(1)|浏览(99)

我在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方法是导致错误的原因。删除它后,一切都正常。
现在我需要弄清楚为什么这个方法会抛出错误。

vfhzx4xs

vfhzx4xs1#

好了,问题是database_authenticable模块有一个名为password_digest的方法,它接受一个参数并使用bcrypt对密码进行哈希运算。
现在,我在数据库中有一个现有的password_digest列,这是我之前使用的ActiveRecords的has_secure_password所需要的。因此,该方法在没有参数的情况下被调用,因此抛出错误:ArgumentError (wrong number of arguments (given 0, expected 1))
我迁移了password_digest列,但显然它在某个时间点失败了,我不得不删除该列以使事情正常工作。
我希望它能帮助任何面临类似问题的人。

相关问题