【问题标题】:Rails Validation Triggers on resetting password重置密码时的Rails验证触发器
【发布时间】:2015-06-28 20:50:54
【问题描述】:

这是我的模型

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
has_many :events
has_many :appointments

validates :name, presence: true
validates :name, format: {with: /\A[[:alnum:]]+\z/, message: 'solo se permiten letras y/o numeros' }, if: 'name.present?'
validates :lastname, format: {with: /\A[[:alnum:]]+\z/, message: 'solo se permiten letras y/o numeros' }, if: 'lastname.present?'
validates :lastname, :presence => true

validates :document, :presence => true
validates_numericality_of :document, :on => :create, :message => "no es un numero", if: 'document.present?'

validates :cellphone, :presence => true
validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, if: 'cellphone.present?', :on => :create
validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, if: 'cellphone.present?', :on => :update
validates :cellphone, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, if: "cellphone.present?", :on => :create
validates :cellphone, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, if: "cellphone.present?", :on => :update

validates :phone, :presence => true
validates :phone, numericality:{ only_integer: true, message:"no es un numero"}, if: "phone.present?", :on => :create
validates :phone, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, if: "phone.present?", :on => :create

validates_format_of :email,:with => Devise::email_regexp, :allow_blank => true

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

     def medic_with_spec
        "#{especialidad}, #{name} #{lastname}"          
     end

     def evento_sin 
        events.where(available: "1")
     end

结束

您可以看到验证:手机具有:on => 创建和:on => 更新,所以我的问题是,当我从电子邮件链接重置密码并使用新密码按更新时,它会显示手机验证错误因为它有 :on => 更新。我怎样才能让它消失?

我试过如果:'cellphone.nil?',它工作正常,因为手机是空白的(重置密码只需要密码和密码确认)但是当我去编辑帐户信息时,它不会验证非零值。

我正在使用设计。

我读了这个链接Validation errors are triggered when I'm trying to reset password,这是完全相同的问题,但我不知道如何实现他们所说的。

我是 ruby​​ on rails 的新手,如果 some1 可以帮助我解决这个问题,我不知道如何实现高级 ruby​​。

【问题讨论】:

  • (我对 Rails 的抱怨之一。)就我个人而言,我对这样的东西使用单独的表单对象,至少在它很简单的时候是这样。过去我使用过上下文相关的验证,但创建微小的 DTO 更容易,而且它进一步将视图与域对象分开。 YMMV。
  • 不知道这个,抱歉

标签: ruby-on-rails ruby validation devise


【解决方案1】:

如果 password_confirmation 字段不为零(这意味着密码已更改),您应该禁用验证。这是一个链接主题Skip validation for some members in Devise model during password reset

所以,在你的情况下,这将是:

validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, :if => :not_recovering_password, :on => :update

def not_recovering_password
  password_confirmation.nil?
end

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2015-08-03
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    相关资源
    最近更新 更多