Rails: convalida la lunghezza minima e massima di una stringa ma lascia che sia vuota


88

Ho un campo che vorrei convalidare. Voglio che il campo possa essere lasciato vuoto, ma se un utente sta inserendo dati, voglio che sia in un certo formato. Attualmente sto utilizzando le seguenti convalide nel modello, ma ciò non consente all'utente di lasciarlo vuoto:

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

Come scrivo questo per raggiungere il mio obiettivo?

Risposte:



133

Puoi anche utilizzare questo formato:

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

O poiché il tuo minimo e massimo sono gli stessi, funzionerà anche quanto segue:

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

12

O ancora più conciso (con la nuova sintassi hash), dalla documentazione validata :

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

Il limite superiore dovrebbe probabilmente rappresentare qualcosa di più significativo come "in: 5..20", ma solo rispondere alla domanda alla lettera.


Non credo inche funzionerà con le stringhe, sembra essere solo numeri
ecologico

1
Questo dovrebbe funzionare invece, validates :foo, length: 2..5, allow_blank: truema `length: {is: 5}` andrebbe bene nel caso
dell'OP


3

ogni validates_ * accetta: if o: a meno che non siano disponibili opzioni

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

dove validate_foo_condition è il metodo che restituisce true o false

puoi anche passare un oggetto Proc:

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

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

rspec per lo stesso è

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

2

Che ne dici di quello: validates_length_of :foo, is: 3, allow_blank: true


-1

Aggiungi il tuo modello:

validates :color, length: { is: 7 }

il colore è una stringa:

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

-4

Nel tuo modello es

def validate
  errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc?
end
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.