trasformazione dei dati dopo la convalida di successo
-
08-10-2019 - |
Domanda
Sto avendo un po 'un problema normalizzare un codice UPC stringa di modo che io possa conservarla nello stesso formato nel database.
Sto usando la gemma ean
per verificare se la stringa è buono (che sta funzionando benissimo), ma se mi passi un certo codice incarico dopo convalida come ad esempio:
validate :upc_check
def upc_check
if !upc.nil?
if !upc.ean?
errors.add(:upc, 'is not a valid UPC.')
else
upc = upc.strip
end
end
end
La chiamata striscia è solo un esempio come è una stringa. Io in realtà essere la rimozione del trattini nel UPC.
Il codice di cui sopra non funziona così bene come in realtà non salvarlo. Ho dato un'occhiata a innescare un metodo come
after_validation :normalize_upc
def normalize_upc
upc = upc.strip
end
.. ma quanto sopra non funziona neanche.
Cosa ragazzi fare per convalidare e trasformare i dati dopo la convalida?
Soluzione
Vorrei fare il mio validatore rigorosa, e quindi utilizzare un filtro before_validation di fare eventuali trasformazioni necessarie.
Altri suggerimenti
mi sento di raccomandare l'override del metodo setter nel modello per UPC e non avere un metodo separato per normalizzare esso. Questo sarebbe essere realizzato con qualcosa come:
def upc=(value)
self.upc = value.strip
end
Modifica:
Vorrei anche ripulire il metodo di convalida per rimuovere questa funzionalità in questo modo:
validate :upc_check, :unless => lambda {|m| m.upc.nil?}
def upc_check
errors.add(:upc, 'is not valid') unless upc.ean?
end