2016-06-28 109 views
0

我有以下三种验证在我的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

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

我可以用旧的语法实现这一目标? – Cameron

+0

@Cameron http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html – meagar

+0

啊,那是因为我用':if =>'而不是'if if: - >' – Cameron