Schienen: Überprüfen der minimalen und maximalen Länge einer Zeichenfolge, wobei diese jedoch leer sein darf


82

Ich habe ein Feld, das ich validieren möchte. Ich möchte, dass das Feld leer gelassen werden kann, aber wenn ein Benutzer Daten eingibt, möchte ich, dass es in einem bestimmten Format vorliegt. Derzeit verwende ich die folgenden Validierungen im Modell, aber der Benutzer kann es nicht leer lassen:

validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5

Wie schreibe ich das, um mein Ziel zu erreichen?

Antworten:



125

Sie können auch dieses Format verwenden:

validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true

Oder da Min und Max gleich sind, funktioniert auch Folgendes:

validates :foo, length: {is: 5}, allow_blank: true


10

Oder noch prägnanter (mit der neuen Hash-Syntax) aus der Validierungsdokumentation :

validates :foo, length: 5..5, allow_blank: true

Die Obergrenze sollte wahrscheinlich etwas Bedeutenderes wie "in: 5..20" darstellen, aber nur die Frage auf den Brief beantworten.


In nicht denken inwird mit Strings funktionieren, scheint nur Zahlen zu sein
ecoologic

1
Dies sollte stattdessen funktionieren, validates :foo, length: 2..5, allow_blank: trueaber `length: {is: 5}` würde im Fall des OP
ausreichen

3

jeder validates_ * akzeptiert: if oder: es sei denn Optionen

validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition

Dabei ist validate_foo_condition eine Methode, die true oder false zurückgibt

Sie können auch ein Proc-Objekt übergeben:

validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}

2
validates_length_of :reason, minimum: 3, maximum: 30

rspec für das gleiche ist

it { should validate_length_of(:reason).is_at_least(3).is_at_most(30) }

2

Wie wär es damit: validates_length_of :foo, is: 3, allow_blank: true


-1

Fügen Sie Ihrem Modell hinzu:

validates :color, length: { is: 7 }

Farbe ist eine Zeichenfolge:

t.string :color, null: false, default: '#0093FF', limit: 7

-4

In Ihrem Modell zB

def validate
  errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc?
end
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.