条件验证,如果另一个验证是有效的
问题描述:
我有以下三种验证在我的Rails应用程序的模型:条件验证,如果另一个验证是有效的
validates_presence_of :reset_code, message: 'Please enter your reset code'
validates_length_of :reset_code, is: 4, message: 'Your reset code should be 4 digits'
validates_format_of :reset_code, with: /\A[0-9]{4}\z/, message: 'Please enter a valid reset code'
我只是想火第二和第三验证,如果第一个是有效的(因为有没有意义告诉用户重置代码不是正确的长度或格式,如果他们根本没有输入的话)。
所以沿着线的东西:
validates_length_of :reset_code, is: 4, message: 'Your reset code should be 4 digits', :if => :reset_code.present?
答
您应该使用新的新的验证语法,并提供一个简单的if:
条件:
validates :reset_code, length: { is: 4 },
message: 'Your reset code should be 4 digits',
if: -> { reset_code.present? }
validates :reset_code, format: { with: /\A[0-9]{4}\z/ },
message: 'Please enter a valid reset code',
if: -> { reset_code.present? }
我可以用旧的语法实现这一目标? – Cameron
@Cameron http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html – meagar
啊,那是因为我用':if =>'而不是'if if: - >' – Cameron