为什么第一次验证不是第二次?

时间:2017-06-16 16:51:42

标签: ruby-on-rails activerecord

鉴于这种担忧,包括在几个类中:

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 个答案:

答案 0 :(得分:1)

简短的回答是验证不要短路​​。每个验证过程都与其他验证的结果无关。

为了防止您的错误更新第二次验证

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

这样,第一次验证将捕获其中一个引用为空的情况,并且此验证仅会捕获两个引用但不具有相同父级的情况