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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top