鉴于这种担忧,包括在几个类中:
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
的原因是什么?
答案 0 :(得分:1)
简短的回答是验证不要短路。每个验证过程都与其他验证的结果无关。
为了防止您的错误更新第二次验证
def same_parent
if first_reference &&
second_reference &&
first_reference.parent != second_reference.parent
errors.add(:base, 'Parent error')
end
end
这样,第一次验证将捕获其中一个引用为空的情况,并且此验证仅会捕获两个引用但不具有相同父级的情况