如果另一个验证有效,则进行条件验证

时间:2016-06-28 15:30:48

标签: ruby-on-rails validation

我在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?

1 个答案:

答案 0 :(得分:1)

您应该使用新的验证语法,并提供简单的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? }