Gibt es ein gsub-Äquivalent für Ganzzahlen oder Dezimalzahlen? Sollte gsub mit ganzen Zahlen arbeiten? Im Grunde versuche ich nur dezimal in ein Ruby-Formular einzutragen und was der Benutzer Kommas verwenden darf. Zum Beispiel möchte ich, dass der Benutzer 1.000.99 eingeben kann.
Ich habe versucht,
zu verwenden %Vor%, aber erhalten Sie den folgenden Fehler "undefinierte Methode 'gsub' für 8: Fixnum", wobei "8" durch die Nummer ersetzt wird, die der Benutzer eingibt.
Wenn Ihr Feld ein Fixnum ist, wird es niemals Kommas haben, da Rails die Benutzereingabe in eine Zahl umwandeln muss, um sie dort zu speichern.
Dies wird jedoch dadurch erreicht, dass to_i für die Eingabezeichenfolge aufgerufen wird, was nicht gewünscht ist. überschreibt den normalen Setter zu etwas wie
%Vor%Nicht getestet, aber etwas ähnliches sollte funktionieren ...
Sie müssen an die Kommas gehen, während die Eingabe noch eine Zeichenfolge ist.
Bearbeiten: Wie in den Kommentaren erwähnt, benötigen Sie eine andere Konvertierung als %code% , wenn Sie Dezimalzahlen akzeptieren und etwas erstellen möchten, das keine ganze Zahl ist. Außerdem haben verschiedene Länder unterschiedliche Konventionen für numerische Interpunktion, daher ist dies keine vollständige Lösung.
probiere %code% . Das heißt, entfernen Sie alles, was keine Ziffer ist. Regexen machen keinen Unterschied zwischen Ganzzahlen, Gleitkommazahlen, Dezimalzahlen usw. Es sind alle Zeichenketten. Und Rails wird es nicht korrekt für Sie konvertieren, weil es nur %code% oder %code% darauf aufruft.
BEARBEITEN:
eigentlich: %code% : alles, was keine Ziffer oder Dezimalpunkt ist, und wandle es in einen Float um.
Gibt es ein gsub-Äquivalent für Ganzzahlen oder Dezimalzahlen? Sollte gsub mit ganzen Zahlen arbeiten? Im Grunde versuche ich nur dezimal in ein Ruby-Formular einzutragen und was der Benutzer Kommas verwenden darf. Zum Beispiel möchte ich, dass der Benutzer 1.000.99 eingeben kann.
Ich habe versucht,
zu verwenden %Vor%, aber erhalten Sie den folgenden Fehler "undefinierte Methode 'gsub' für 8: Fixnum", wobei "8" durch die Nummer ersetzt wird, die der Benutzer eingibt.
Wenn Ihr Feld ein Fixnum ist, wird es niemals Kommas haben, da Rails die Benutzereingabe in eine Zahl umwandeln muss, um sie dort zu speichern.
Dies wird jedoch dadurch erreicht, dass to_i für die Eingabezeichenfolge aufgerufen wird, was nicht gewünscht ist. überschreibt den normalen Setter zu etwas wie
%Vor%Nicht getestet, aber etwas ähnliches sollte funktionieren ...
Sie müssen an die Kommas gehen, während die Eingabe noch eine Zeichenfolge ist.
Bearbeiten:
Wie in den Kommentaren erwähnt, benötigen Sie eine andere Konvertierung als String.to_i
, wenn Sie Dezimalzahlen akzeptieren und etwas erstellen möchten, das keine ganze Zahl ist. Außerdem haben verschiedene Länder unterschiedliche Konventionen für numerische Interpunktion, daher ist dies keine vollständige Lösung.
probiere self.number.gsub(/\D/, '')
. Das heißt, entfernen Sie alles, was keine Ziffer ist. Regexen machen keinen Unterschied zwischen Ganzzahlen, Gleitkommazahlen, Dezimalzahlen usw. Es sind alle Zeichenketten. Und Rails wird es nicht korrekt für Sie konvertieren, weil es nur #to_i
oder #to_f
darauf aufruft.
BEARBEITEN:
eigentlich: self.number.gsub(/[^\d\.]/, '').to_f
: alles, was keine Ziffer oder Dezimalpunkt ist, und wandle es in einen Float um.
Tags und Links ruby ruby-on-rails-3 ruby-on-rails