Ruby on rails Rails模型更新验证
我不明白为什么我的模型没有按我所希望的那样运行Ruby on rails Rails模型更新验证,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我不明白为什么我的模型没有按我所希望的那样运行 class User < ActiveRecord::Base has_secure_password validates :first_name, :last_name, presence:true, length: { maximum: 30 } validates :username, presence:true,
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
class用户6},
除非:lambda{persistend?和password.nil?}
验证:密码确认,
在场:没错,
除非:lambda{persistend?和password.nil?}
验证:电子邮件,
格式:{with://\A([^@\s]+)@((?:[-A-z0-9]+\)+[A-z]{2,})\z/i,on::create},
独特性:没错,
允许为空:true
结束
正如您所看到的,代码非常简单
要有密码摘要字段,我需要“密码”和“密码确认”
在创建模式下,一切正常。
在更新模式下无法按我需要的方式工作
我想检查验证密码并检查它们是否始终匹配,除非用户已经存在并且“密码”字段为空
有什么建议吗?我会尝试一种更简单的逻辑:
validates :password,
presence:true,
confirmation: true,
length: { :minimum => 6},
unless: :persisted?
validates :password_confirmation,
presence: true,
if: lambda{ password.present? }
对于新的用户
:
- 如果
为空,则password
password
- 如果存在
,并且password
为空,则password\u confirmation
password\u confirmation
用户
:
- 如果
为空,则不会发生任何事情password
- 如果存在
,并且password
为空,则password\u confirmation
password\u confirmation
persistent?
应该阅读persistend?
关于第一条评论,如果你看到我在你引用的那一行下面定义的话。第二个是类型错误,在我“持久化”的代码中是的,您描述了所需的结果。我的问题是关于实际发生了什么。如果密码为空(并被保留),它不会检查。那很好。但是如果密码存在,并且密码确认为空,则不会进行检查。错误已进入控制器,模型正常,如果浪费时间,请道歉。这符合我的逻辑,无论如何,我更喜欢你提出的风格。谢谢lot@FrancescoE. 谢谢你的更新,很高兴听到你发现了这个问题。