Как настроить Rails для вывода десятичных знаков с правильной точностью в полях формы? - PullRequest
4 голосов
/ 19 октября 2010

Я хочу хранить валюты в моих (sqlite и mysql) базах данных.Я пытаюсь использовать тип столбца decimal, с :scale => 2.

Это не так, как ожидалось.Если я сохраняю запись с :rate => 10.50, она сохраняется в моей базе данных sqlite как 10.5.Кроме того, когда я вывожу значение в поле формы, оно отображается как 10.5.

. Я не хочу заниматься хакингом форматирования строк каждый раз, когда хочу красиво отобразить значения в формах Rails.

Есть ли способ обойти это?Это вещь sqlite?Я просто неправильно понимаю тип столбца decimal?

Редактировать:

Чтобы уточнить, я хочу иметь возможность, поэтому используйте обычные методы генерации форм:

- form_for @project do |f|
  = f.text_field :rate

Если мне нужно явно отформатировать вывод, мне придется создать дополнительные методы для каждого десятичного атрибута:

def formatted_rate
  "%.2f" % rate
end

= f.text_field :formatted_rate

Существуют ли другие распространенные приемы для принудительного форматирования вывода, ивсе еще используете Rails formbuilder по умолчанию?

Ответы [ 2 ]

4 голосов
/ 19 октября 2010

Вы можете использовать Rails ActionView Number Helper number_with_precision:

number_with_precision(my_number, :precision => 2)
1 голос
/ 20 октября 2010

Я закончил тем, что написал плагин для этого: currency_text_field .

Вы можете определить свои форматы (аргументы number_with_precision) в config/initializers/currency_text_field_initializer.rb.

Затем вы используете f.currency_text_field :rate в своей форме с необязательным аргументом :format для использования именованного формата в инициализаторе.В противном случае он использует format[:default] из инициализатора.

Тот же подход, что и для явной установки value, но делает все это за кадром и имеет именованные наборы параметров number_with_precision.

...