Schienen number_field Alternative für Dezimalwerte

78

Ich versuche, mit der number_field-Methode einen Dezimalwert (USD, also 12,24 wäre ein Beispiel) zu akzeptieren.

<div class="controls">
  <%= f.number_field :amount, :class => 'text_field' %>
</div>

Dadurch kann ich nur ganzzahlige Werte eingeben.

Adrian Elder
quelle

Antworten:

145

Sie können die Einschränkung "Nur Ganzzahlen" umgehen, indem Sie ein Float für die Schrittoption hinzufügen:

f.number_field :amount, step: 0.5

Update: Tatsächlich können Sie den Wert 'any' für den Schritt verwenden, er akzeptiert alle Gleitkommazahlen und Ganzzahlen und der Schritt ist 1:

f.number_field :amount, step: :any

Update für Preise:

Sie können den Schienenhelfer verwenden, number_to_currencyum einen Preis in einem number_field anzuzeigen:

f.number_field :amount, value: number_to_currency(f.object.amount.to_f, delimiter: '', unit: ''), step: :any
MrYoshiji
quelle
41
:step => 0.01wenn Sie Zahlen mit 2 Dezimalstellen wollen
Miotsu
1
Ist diese Abrundung nur zur Anzeige oder auch zur internen Darstellung?
Lori
1
@Lori Der angezeigte Wert ist der gleiche wie der mit dem HTML-Formular übermittelte. Wenn Sie 0.33in ein eingeben number_field_tag :amount, erhalten Sie params[:amount]gleich 0.33
MrYoshiji
4

Für Preisfelder können Sie Folgendes verwenden:

f.number_field :price, value: @item.price ? '%.2f' % @item.price : nil, min: 0, step: 0.01

Es funktioniert auch dann gut, wenn Sie leere Werte zulassen.

Collimarco
quelle