hihorails 3 convalida di una stringa
C'è un modo per dire ai binari che la mia stringa potrebbe non essere "qualcosa"?
Sto cercando qualcosa di simile
validates :string, :not => 'something'
grazie klump
hihorails 3 convalida di una stringa
C'è un modo per dire ai binari che la mia stringa potrebbe non essere "qualcosa"?
Sto cercando qualcosa di simile
validates :string, :not => 'something'
grazie klump
Uno di questi farà il lavoro (clicca sui metodi per la documentazione):
Probabilmente il miglior e più veloce, facile da estendere per altre parole:
validates_exclusion_of :string, :in => %w[something]
Questo ha un vantaggio di utilizzare un regexp, in modo da poter generalizzare facile:
validates_format_of :string, :without => /\A(something)\Z/
È possibile estendere ad altre parole con /\A(something|somethingelse|somemore)\Z/
Questo è il caso generale con il quale è possibile ottenere alcuna convalida:
validate :cant_be_something
def cant_be_something
errors.add (:string, "can't be something") if self.string == "something"
end
per ottenere esattamente la sintassi avete proposto (validates :string, :not => "something"
) si può usare questo codice (un avvertimento però, l'ho scoperto mentre leggevo il ramo principale del rails source e dovrebbe funzionare, ma non funziona sulla mia ~ 3 mesi di installazione). Aggiungere questo da qualche parte nel vostro percorso:
class NotValidator < ActiveModel::EachValidator
def validate_each (record, attribute, value)
record.errors[attribute] << "must not be #{options{:with}}" if value == options[:with]
end
end
un paio di modi. Se si dispone di lista esatta di ciò che non può essere:
validates_exclusion_of :string, :in => ["something", "something else"]
Se si vuole assicurare che non esiste come una sottostringa a tutti:
validates_format_of :string, :with => /\A(?!something)\Z/
Se è più complicato e vuoi nascondere i dettagli disordinati:
validate :not_something
def not_something
errors.add(:string, "Can't be something") if string =~ /something/
end
+1 Roba buona! Penso che le nostre risposte siano convergenti :) –
Sì, immagino che entrambe le abbiamo trattate in modo abbastanza esaustivo;) L'uso di '\ A' e' \ Z' è probabilmente un'idea più sicura - buona presa. –