我尝试了 Amal Kumar S 解决方案,但不幸的是它并没有帮助我解决同样的问题,所以这里是在实际项目中测试的解决方案的修改版本。
这是来自 devise/models/validatable.rb 模块的代码
protected
# Checks whether a password is needed or not. For validations only.
# Passwords are always required if it's a new record, or if the password
# or confirmation are being set somewhere.
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
如果您在更新用户信息时留下空白密码和密码确认字段,则验证失败,因为此条件始终为假:
!password.nil? || !password_confirmation.nil?
Password 和 password_confirmation 字段等于空白字符串 '',它永远不等于 nil。所以你可以通过覆盖password_required来解决这个问题?用户模型中的方法并更改为零?检查空白?查看。
protected
def password_required?
!persisted? || !password.blank? || !password_confirmation.blank?
end
认为这是解决该问题的最简单方法,并且不会破坏原始逻辑。也许是设计的错误。