2017-09-18 10 views
1

에서 상호 배타적 필드 '의 존재를 적용하지만, 디버거는 트리거를 수행하고, 값은 내 테스트 케이스에 대한 기대됩니다이 코드는 나를 위해 작동하지 않습니다 레일

validates :a, :presence => false, :if => Proc.new { |f| debugger; f.b.present? } 
validates :b, :presence => false, :if => Proc.new { |f| debugger; f.a.present? } 

목표 : ab 동시에 정의해서는 안됩니다.

구문을 이해하면 b이있는 경우 a의 존재 여부는 false이어야합니다. b에 대해서도 비슷합니다.

오해? 나는 데이터가 save!을 통해 기록된다고 믿는다. 그러나 나는 이미 유효성 검사가 호출되고 있음을 확인했다. 나는 obj.save! 직후에 객체를 보았고 obj.errors에는 빈 messages 해시가 있습니다.

답변

0

문제는 함께하지 않은 논리 '가'- presence: false가의 반대가 아닙니다 presence: true

참조 :

validates :a, length: {is: 0}, if: Proc.new { |f| f.b.present? } 
validates :b, length: {is: 0}, if: Proc.new { |f| f.a.present? } 
: 내가 사용 결국 Rails 3 Validation :presence => false