2017-09-18 2 views
1

Dieser Code ist für mich nicht funktioniert, aber der Debugger auslöst, und die Werte sind das, was ich für meinen Testfall erwarten:Erzwingen sich gegenseitig ausschließende Felder Präsenz in Schienen

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

Ziel: a und b sollte niemals gleichzeitig definiert werden.

Wenn ich die Syntax verstehe, a Anwesenheit sollte false sein, wenn b vorhanden ist. Und ähnlich für b.

Habe ich das falsch verstanden? Ich glaube, dass die Daten über save! aufgezeichnet werden. Aber dann habe ich bereits bestätigt, dass die Validierungen aufgerufen werden. Ich schaute auf das Objekt sofort nach obj.save! und die obj.errors hat eine leere messages Hash.

Antwort

0

Das Problem ist nicht mit dem 'if' Logik - presence: false ist nicht das Gegenteil von presence: true

Referenz: Rails 3 Validation :presence => false

ich am Ende mit:

validates :a, length: {is: 0}, if: Proc.new { |f| f.b.present? } 
validates :b, length: {is: 0}, if: Proc.new { |f| f.a.present? } 
Verwandte Themen