self.save! produces an argument error #<ArgumentError: wrong number of arguments (0 for 2)>

self.save! produces an argument error #<ArgumentError: wrong number of arguments (0 for 2)>

我正在用以下代码覆盖 Devise 的 valid_password 函数:

  def valid_password?(password)
   if legacy_password?
     return false unless Devise.secure_compare(self.encrypted_password,
                                               legacy_password(password, self.encrypted_password))

    attributes = { password:               password,
                   password_confirmation:  password,
                   legacy_password:        false }

    save!
   end
   super password
  end

我的跟踪显示一切都已正确设置(新的 encrypted_password)但是当进程到达保存时!它 returns #<ArgumentError: wrong number of arguments (0 for 2)>

帮助感谢!

更新:

当我浏览这些字段时,密码和 password_confirmation 似乎设置正确,但 legacy_password 是返回错误的原因。此外,当我在控制台中输入 User.legacy_password 时,我得到了同样的错误。这是数据库的问题吗?

我最近添加了 legacy_password 作为迁移。

class AddLegacyPasswordToSpreeUsers < ActiveRecord::Migration
 def up
  add_column :spree_users, :legacy_password, :boolean
 end

 def down
  remove_column :spree_users, :legacy_password
 end

结束

原来我有一个同名的方法 (legacy_password)。当我尝试更新属性时,它正在调用方法(需要 2 个参数)并返回上述错误。