Не удается получить десятичные дроби для отображения в текстовом поле для Rails 3 - PullRequest
2 голосов
/ 02 июля 2011

Confused Rails 3 новичка. Моя модель имеет атрибут purchase_price, определенный следующим образом:

t.decimal :purchase_price, :precision => 12, :scale => 2, :default => 0.00

Моя цель - создать простое приложение на Rails 3, где я могу просматривать и редактировать это значение. В моей модели я определил собственный метод получения, чтобы всегда существовали 2 десятичных знака.

def purchase_price
  sprintf( "%.2f",attributes['purchase_price'])
end

Это работает правильно с консоли и при отображении страницы показа. На странице редактирования у меня есть текстовое поле для редактирования этого значения. Моя проблема заключается в том, что если это значение сохраняется как «123,00», значение отображается как «123,0».

Вопросы:

  1. Почему мой пользовательский получатель не вызывается?
  2. Почему это отображается с 1 десятичным знаком, а не с 2 десятичными?

Обновление

  1. Десятичное значение, хранящееся в MySQL: 100,20
  2. Значение, возвращаемое из консоли: 100,20
  3. Значение, отображаемое в текстовом поле: 100,2
  4. Значение, возвращаемое через Firebug: "100,2"
  5. Длина текстового поля не имеет значения.
  6. Если значение в БД равно 100,21, оно отображается правильно как 100,21

1 Ответ

2 голосов
/ 02 июля 2011

Попробуйте это

f.text_field :purchase_price, :value=>number_to_currency(f.object.purchase_price, :unit=>'')

Это должно преобразовать число в валюту (с двумя десятичными знаками), и :unit=>'' исключит "$".

И я бы рекомендовал удалить пользовательский метод purchase_price и использовать помощник number_to_currency там, где это необходимо. Переопределение метода доступа purchase_price не является плохой идеей, но может привести к путанице в некоторых вещах, которые могут ожидать число, а не строку.

...