我正在尝试在create
和update
上验证用户的密码(自定义身份验证,没有宝石)。 create
始终需要输入密码,但只有在update
输入时才需要输入密码。
模型/ user.rb
has_secure_password
validates :password, presence: {if: :requires_password?}, length: {minimum: 6}
validates :password_confirmation, presence: {if: :requires_password?}
private
def requires_password?
new_record? || !password.nil?
end
这可以按预期工作,但在创建新用户时,会显示错误消息“密码不能为空”两次。
是否有一个简单的解决方法,或者我是否以错误的方式接近密码验证?
答案 0 :(得分:9)
请参阅doc of has_secure_password
,已包含对状态的验证:
验证密码是否存在,密码确认(使用 自动添加“password_confirmation”属性。您可以 如果需要,可以手动添加更多验证。
答案 1 :(得分:2)
试试这个:
validates :password, \
presence: true,
length: {minimum: 6},
confirmation: true,
if: :requires_password?
(为了便于辨认,我把它分成了多行;你仍然可以使用单行)
您不需要两次单独的验证 - 您只需要password
上的一个包含确认验证的验证。
答案 2 :(得分:1)
这似乎对我有用!
validates :password, length: {minimum: 6}, allow_blank: true
创建时需要密码,但只有在传入内容时才需要更新。由于我使用has_secure_password
,因此会自动处理确认。
更新了 models / user.rb
has_secure_password
validates :password, length: {minimum: 6}, allow_blank: true
感谢您的帮助!