2010-12-05 36 views
1

Ich habe ein kleines Problem mit der Normalisierung eines UPC-String-Codes, damit ich ihn im selben Format in der Datenbank speichern kann.Datentransformation nach erfolgreicher Validierung

ich die ean gem bin mit zu überprüfen, ob die Saite gut ist (was in Ordnung funktioniert), aber wenn ich einige Zuordnungscode werfen nach bestätigt es wie:

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 

Der Streifen Anruf ist nur ein Beispiel, wie es eine Zeichenfolge ist. Ich werde tatsächlich die Bindestriche in der UPC entfernen.

Der obige Code funktioniert nicht so gut, da er nicht gespeichert wird. Ich habe eine Methode wie

.. Triggern, aber das obige funktioniert auch nicht.

Was machen Sie, um Daten nach der Validierung zu validieren und zu transformieren?

Antwort

1

Ich würde meinen Validator streng machen, Verwenden Sie dann einen before_validation-Filter, um erforderliche Transformationen durchzuführen.

+0

Danke, das habe ich getan. Es läuft gut. – Nitrodist

1

Ich würde empfehlen, die Setter-Methode in Ihrem Modell für upc zu überschreiben und keine separate Methode zur Normalisierung zu haben. Dies würde mit etwas erreicht werden, wie:

def upc=(value) 
    self.upc = value.strip 
end 

Edit:

Ich würde auch Ihre Validierungsmethode aufzuräumen, um diese Funktionalität zu entfernen, wie so:

validate :upc_check, :unless => lambda {|m| m.upc.nil?} 

def upc_check 
    errors.add(:upc, 'is not valid') unless upc.ean? 
end 
+0

Danke für die Tipps. Ich habe das obige versucht, aber wenn ich versuche, es von der Konsole aus zu setzen, dann gibt es mir einen 'Stack Level zu tief' Fehler. Gedanken? – Nitrodist

+0

https://gist.github.com/728710 für ein Beispiel. – Nitrodist

+1

Mein schlechtes wird die Setter-Methode immer mit dem, was ich geschrieben habe, aufrufen. Ändern Sie self.upc in super (value.strip) oder verwenden Sie write_attribute –

Verwandte Themen