Ich denke, Sie haben einen Fehler in Ihrer Syntax:
%Vor% Da war einer: wenn zu viele drin sind ...
Und wenn ich richtig verstehe, willst du es nur im Fall one == 0 && two == 1
validieren lassen?
Dann konditionierst du? ist invertiert (lassen Sie die! ()) weg
Wenn Sie sich nicht sicher sind, können Sie versuchen, pey zu verwenden und einen Haltepunkt in Ihre condition_testing?
-Methode einzufügen, um zu sehen, was passiert.
(Bitte beachten Sie ":" vor der Zustandsprüfung)
Das Problem besteht darin, dass Sie einen Anwesenheitsvalidierer mit einer Bedingung verwenden, die die Werte der Attribute überprüft. Das ist falsch. Ein Präsenzvalidierer überprüft, ob diese Attribute festgelegt sind. Was noch schlimmer ist, Sie geben die if
-Option weiter (@Tigraine war übrigens richtig, dass Ihre Syntax falsch ist), was bedeutet, dass die Anwesenheit überhaupt nicht überprüft wird, wenn diese Methode den Wert true zurückgibt. Wie Sie dies eingerichtet haben, wird der Validator nur ausgeführt, wenn one
gleich 1 und two
gleich 0 ist. Andernfalls werden überhaupt keine Validierungen ausgeführt! Ich denke, die beste Option ist hier, eine benutzerdefinierte Validierung zu schreiben:
Dies fügt dem Modell mit der angegebenen Nachricht einen Fehler hinzu, wenn die Bedingung wahr zurückgibt. (Hinweis: Ich weiß immer noch nicht, welche Bedingung gültig und welche ungültig ist. Sie können also den letzten Teil nach Ihren Bedürfnissen ändern.)
Tags und Links ruby-on-rails-3 ruby-on-rails activerecord validation rails-activerecord