2017-06-16 109 views
-1

考虑到这一问题,包括在几类:为什么不是第一次验证第二个验证?

concern: Helpful do 
    included do 
    validates :first_reference_id, :second_reference_id, presence: true 
    validates :same_parent 
    end 

    def same_parent 
    unless first_reference.parent == second_reference.parent 
     errors.add(:base, 'Parent error') 
    end 
    end 
end 

什么会导致在第二验证一个NoMethodError: undefined_method 'parent' for nil:NilClass

回答

1

简短的答案是验证不短路。每个验证过程独立于其他验证的结果。

为了防止你的错误的第二验证更新到

def same_parent 
    if first_reference && 
     second_reference && 
     first_reference.parent != second_reference.parent 
    errors.add(:base, 'Parent error') 
    end 
end 

这种方式,第一审定会赶上的情况下,该引用的一个是空的,此验证将只赶上的情况下,有两个引用,但他们没有相同的父母

相关问题