【问题标题】:rails password update validation issuerails密码更新验证问题
【发布时间】:2011-11-29 19:30:54
【问题描述】:

我有以下验证:

validates :password, :presence => true, :confirmation => true, :length => { :within => 6..40 }, :format => { :with => pass_regex }, :unless => :nopass?

然后,当我尝试在没有密码的情况下更新时(nopass? 为真),出现以下错误:

There were problems with the following fields:

Password is too short (minimum is 6 characters)
Password is invalid

注意 :unless 适用于 :presence 和 :confirmation 但不适用于 :lenght 或 :format。

我该如何解决这个问题?

【问题讨论】:

  • 你使用哪个 Rails 版本?

标签: ruby-on-rails validation passwords


【解决方案1】:

我在 :confirmation 标志上也遇到了一些奇怪的问题,我从来没有弄清楚,但这就是我在 Rails 3.0.x 应用程序中解决问题的方法:

attr_accessor :password_confirmation

validates :password, :presence => true, :length => {:within => PASSWORD_MIN_LENGTH..PASSWORD_MAX_LENGTH}

validate :password_is_confirmed

  def password_is_confirmed
 if password_changed? # don't trigger that validation every time we save/update attributes
  errors.add(:password_confirmation, "can't be blank") if password_confirmation.blank?
  errors.add(:password_confirmation, "doesn't match first password") if password != password_confirmation
 end
end

我知道这并不是您的代码无法运行的原因,但如果您正在寻找快速的临时修复 - 我希望这会有所帮助。

【讨论】:

  • 你如何定义password_changed?我在保存之前加密了密码。
  • 对于所有属性,您会自动获得 _changed?方法,它来自 ActiveRecord。您实际上可以尝试这样使用它: validates_presence_of :password_confirmation, :if => :password_changed?我自己还没有尝试过,但您可能可以将其放入上面的代码中。 (注意:在这种情况下,您仍然需要 attr_accessor :password_confirmation ;我认为 :confirmation => true 应该正是这样做的)
【解决方案2】:

你可以使用conditional validations

class Person < ActiveRecord::Base
  validates :surname, :presence => true, :if => "name.nil?"
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多