【问题标题】:Rails skip validation on conditionRails 根据条件跳过验证
【发布时间】:2015-05-26 18:21:28
【问题描述】:

我正在尝试绕过应用程序中用户模型的密码验证。我有以下基于一些类似的 SO 问题:

模型.rb

attr_accessor :skip_password_validation
has_secure_password
validates :password, length: { minimum: 6 }, allow_nil: true, unless: :skip_password_validation

controller.rb

@mem.skip_password_validation = true
if @mem.valid?
    #do some stuff
else
    render 'last_template'
end

这会始终呈现最后一个模板并返回密码验证错误。感谢您的帮助。

【问题讨论】:

  • 什么时候不验证?
  • skip_password_validation 等于某个值时。可以是truefalse,细节无关紧要。
  • 试试if: -> { |mem| mem.skip_password_validation }
  • 在控制器@mem.skip_password_validation = "true"和模型validates :password, length: { minimum: 6 }, allow_nil: true, if: "skip_password_validation.blank?"中试试这个
  • 我确实有其他验证,但出现的唯一错误是:password 字段上的Password can't be blank

标签: ruby-on-rails ruby validation ruby-on-rails-4


【解决方案1】:

问题是as mentioned in the docs has_secure_password 添加了自己的验证:

自动添加以下验证:

  • 创建时必须有密码
  • 密码长度应小于或等于 72 个字符
  • 密码确认(使用 password_confirmation 属性)

更新

Also as mentioned in the docs 您可以通过提供:validations 选项来禁用验证,将其设置为false

为了进一步的可定制性,可以通过传递 validations: false 作为参数来禁止默认验证。

【讨论】:

  • 感谢您的建议。我都试过了,都没有奏效。给出的错误是Password can't be blank
  • 啊,这就是我需要的提示,我已经编辑了我的答案:)
  • 那么有没有办法绕过这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2015-01-21
  • 2011-05-22
  • 1970-01-01
相关资源
最近更新 更多