Hier ist, was in meinem Modell Ich verwende:Wie entferne ich Dollarzeichen von einem Wert vor der Validierung in Rails?
before_validation :strip_dollar_sign
validates :amount_due,
:format => { :with => /^\d+??(?:\.\d{0,2})?$/ },
:numericality => {:greater_than => 0}
private
def strip_dollar_sign
self.amount_due = self.amount_due.to_s.tr!('$,','').to_f
end
Wenn ich die Linie von der strip_dollar_sign Funktion von Hand in der Rails-Konsole ich genau das bekommen, laufen, was ich will (dh $ 400 endet als 400,0), aber wenn Ich benutze das eigentliche Formular in meiner App, der Wert endet immer bei 0.0. Wer fängt was ich falsch mache?
Geld sollte nicht als Gleitkommazahl gespeichert werden, sondern als Dezimalzahl in der Datenbank und BigDecimal in Ruby. Floats können Rundungsfehler aufweisen, die zu unerwarteten Ergebnissen führen können. – DGM