Überprüft mit :wenn
Ich versuche zu schaffen, ein Zustand, in dem das Attribut 'eins' ist null und das Attribut 'zwei' eins ist, dann ein Modell ist nicht gültig. Aber wenn ich das machen:
Model.create(:one => 1, :two => 0).valid?
Den unit-test zurück true
! Warum?
validates :one, :two, :presence => true, :if => :if condition_testing?
def condition_testing?
!(one == 0 && two == 1)
end
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke du hast einen Fehler in deiner syntax:
Gab es eins :wenn zu viele dort...
Und wenn ich das richtig verstanden, Sie wollen es nur überprüfen im Fall
one == 0 && two == 1
?Dann condition_testing? invertiert (lassen Sie das !())
Wenn Sie unsicher sind, könnten Sie versuchen, zu verwenden hebeln und legen Sie einen Haltepunkt in Ihrem
condition_testing?
Methode, um zu sehen, was Los ist.(Bitte beachten Sie Hinzugefügt ":" vor Zustand testen)
Können Sie überprüfen, es in einer Zeile:
Sind Sie besser dran mit numericality und gleich.
http://guides.rubyonrails.org/active_record_validations_callbacks.html#numericality
Das problem ist, dass Sie eine Präsenz-Prüfung mit einem Zustand, der überprüft die Werte der Attribute. Das ist falsch. Eine Präsenz validator überprüft, um sicherzustellen, dass diese Attribute sind gesetzt. Was ist schlimmer, Sie übergeben die
if
option (@Tigraine war korrekt über Ihre syntax falsch, übrigens), was bedeutet, dass, wenn diese Methode true zurück, wird die Anwesenheit nicht überprüft. Die Art und Weise haben Sie diese Einrichtung, die Bestätigung wird nur ausgeführt, wennone
ist gleich 1 undtwo
gleich 0 ist. Ansonsten, Nein, die Prüfungen laufen alle! Ich denke, die beste option hier ist, schreiben Sie eine benutzerdefinierte Gültigkeitsprüfung:Dadurch wird ein Fehler in das Modell mit der angegebenen Meldung, wenn die Bedingung true zurückgibt. (Anmerkung: ich bin mir immer noch nicht klar, was Bedingung ist gültig und welche ungültig ist, so fühlen sich frei, zu ändern, dass der Letzte Teil, um Ihre Bedürfnisse anzupassen.)