Ich habe dieses Bearbeitungsformular.
Wenn ich jedoch etwas wie 1,5 speichere, möchte ich es als 1,50 anzeigen.
Wie könnte ich das mit dem Formularhelfer machen? <%= f.text_field :cost, :class => 'cost' %>
Antworten:
Sie sollten number_with_precision
Helfer verwenden. Siehe doc .
Beispiel:
number_with_precision(1.5, :precision => 2)
=> 1.50
In dir bilden Helfer:
<%= f.text_field :cost, :class => 'cost', :value => (number_with_precision(f.object.cost, :precision => 2) || 0) %>
Übrigens, wenn Sie wirklich einen Preis anzeigen möchten, verwenden Sie number_to_currency
dieselbe Seite für das Dokument (In einem Formularkontext möchte ich behalten number_with_precision
, dass Sie nicht mit Geldsymbolen herumspielen möchten).
Alternativ können Sie die Formatzeichenfolge verwenden "%.2f" % 1.5
. http://ruby-doc.org/docs/ProgrammingRuby/html/ref_m_kernel.html#Kernel.sprintf
Dafür verwende ich den Formatierer number_to_currency. Da ich in den USA bin, funktionieren die Standardeinstellungen für mich einwandfrei.
<% price = 45.9999 %>
<price><%= number_to_currency(price)%></price>
=> <price>$45.99</price>
Sie können auch Optionen übergeben, wenn die Standardeinstellungen für Sie nicht funktionieren. Dokumentation zu verfügbaren Optionen unter api.rubyonrails.org
Rails verfügt über eine Hilfsmethode number_to_currency , die möglicherweise besser zu Ihrem spezifischen Anwendungsfall passt.
number_to_currency
führt zu einer formatierten Zeichenfolge, die Rails nicht in einen Float umwandeln kann. number_with_precision
ist wahrscheinlich die bessere Option.
price = "$3.99"; price.slice!("$"); puts price.to_f => 3.99
Es hängt nur von der gewünschten Benutzererfahrung ab. Einige möchten möglicherweise die Möglichkeit, ein Dollarzeichen in das Eingabefeld einzufügen. Ich weiß, ich mag die Option.
|| 0
verhindert, dass HTML5-Platzhalterwerte angezeigt werden, es sei denn, der Benutzer löscht den Wert. Das Löschen des Felds kann auch Probleme mit der numerischen Validierung verursachen (da ein leeres Wertattribut vorhanden ist, wenn Sie kein Wertattribut wünschen ). Nichts, was ein wenig JS nicht reparieren kann, aber es scheint, dass Rails in diesem Fall ein bisschen schlauer sein sollte.