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. 谢谢你的更新,很高兴听到你发现了这个问题。