我无法弄清楚为什么我的模型没有按照我的意愿行事。
class User < ActiveRecord::Base
has_secure_password
validates :first_name, :last_name,
presence:true,
length: { maximum: 30 }
validates :username,
presence:true,
uniqueness:true,
length: { maximum: 30 }
validates :password,
presence:true,
confirmation: true,
length: { :minimum => 6},
unless: lambda{ persisted? and password.nil? }
validates :password_confirmation,
presence: true,
unless: lambda{ persisted? and password.nil? }
validates :email,
format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create },
uniqueness: true,
allow_blank: true
end
正如您所看到的,代码非常简单。
要获得password_digest字段,我需要'password'和'password_confirmation'。
在创建模式下,一切都很好。 在更新模式下无法正常工作。
我想检查验证密码并检查它们是否始终匹配,除非用户已存在且“密码”字段为空。
有什么建议吗?
答案 0 :(得分:2)
我会尝试一个更简单的逻辑:
validates :password,
presence:true,
confirmation: true,
length: { :minimum => 6},
unless: :persisted?
validates :password_confirmation,
presence: true,
if: lambda{ password.present? }
对于新的User
:
password
为空,则会在password
password
存在且password_confirmation
为空,则password_confirmation
对于现有的User
:
password
为空白,则不会发生任何事情password
存在且password_confirmation
为空,则password_confirmation