Rails 3 Validierung :Präsenz => false
Hier ist, was ich erwartet habe ein ganz einfache Frage, aber ich kann nicht finden eine definitive Antwort in den Guides oder anderswo.
Habe ich zwei Attribute, die auf ein ActiveRecord. Ich will genau ein, anwesend zu sein und die anderen zu null oder eine leere Zeichenfolge.
Wie mache ich das äquivalent von :Präsenz => false? Ich möchte sicherstellen, dass der Wert null.
validates :first_attribute, :presence => true, :if => "second_attribute.blank?"
validates :second_attribute, :presence => true, :if => "first_attribute.blank?"
# The two lines below fail because 'false' is an invalid option
validates :first_attribute, :presence => false, :if => "!second_attribute.blank?"
validates :second_attribute, :presence => false, :if => "!first_attribute.blank?"
Oder vielleicht gibt es eine elegantere Möglichkeit dies zu tun...
Ich bin mit Rails 3.0.9
- Ich bin mir nicht sicher, Sie brauchen :Präsenz => false an alle in den letzten zwei Zeilen code.
- Es muss ein test von einigen Sortieren. Wenn ich loswerden :Präsenz-Validierung, die es mich gibt: C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3. 0.9/lib/active_model/Validierungen/validiert.rb:79:in `überprüft': Zuleitung benötigt Man mindestens eine Validierung (ArgumentError)
- Erwähnenswert für Rails 4, dass dies heißt
validates_absence_of
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für die Möglichkeit, ein Objekt gültig sein, wenn und nur wenn ein bestimmtes Attribut null ist, können Sie "Inklusion" anstatt eigene Methode.
Dies ist für Rails 3. Die Schienen 4-Lösung ist wesentlich eleganter:
verwenden Sie die benutzerdefinierte Validierung.
Sieht es so aus :Länge => { :ist => 0 } funktioniert das, was ich brauche.
validates :first_attribute, :length => {:is => 0, :message => "must be blank" }, :unless => "second_attribute.blank?"
Versuchen:
Hoffe, dass hilft .