Ich habe ein Objekt mit einem Attribut namens Wert, das vom Typ große Dezimalzahl ist. In der Klassendefinition habe ich validates_numericality_of.
Aber wenn ich:
%Vor%'fire' endet mit der Typumwandlung in den richtigen Typ, bevor die Validierung ausgelöst wird:
%Vor%Wie kann die Validierung vor der Typumwandlung ausgelöst werden?
Danke
Dan
Von ActiveRecord :: Base-Dokumentation :
Manchmal möchten Sie lesen können die rohen Attributdaten ohne zu haben die spaltenbestimmte Typumwandlung läuft Natürlich zuerst. Das kann gemacht werden durch mit dem
<attribute>_before_type_cast
Accessoren, die alle Attribute haben. Zum Beispiel, wenn IhrAccount
Modell hat ein Balance-Attribut, das Sie anrufen könnenaccount.balance_before_type_cast
oderaccount.id_before_type_cast
.Dies ist besonders nützlich in Validierungssituationen, in denen der Benutzer könnte eine Zeichenfolge für eine ganze Zahl liefern Feld und Sie möchten das anzeigen ursprüngliche Zeichenfolge zurück in einem Fehler Botschaft. Zugriff auf das Attribut normalerweise würde die Zeichenfolge zu typisieren 0, was nicht das ist, was du willst.
Ein neues Schmuckstück wurde erstellt, um Typen in Schienen zu validieren .
Ein erklärender Blogbeitrag existiert, um mehr von dem "Warum" zu beantworten, in dem er erstellt wurde erster Platz.
Mit dieser Bibliothek könnte Ihr Code sein:
%Vor% Dies wird eine Ausnahme auslösen, wenn alles außer einem Float value
zugewiesen wird, anstatt das value
ruhig in ein BigDecimal umzuwandeln und es zu speichern.
Tags und Links ruby ruby-on-rails-3 ruby-on-rails