Rails - Форматировать число как формат валюты в Getter

Я делаю простое решение для розничной торговли, в котором есть ценыдля нескольких разных моделей. Эти цены составляют общую цену. Представьте, что вы платите на 0,30 доллара больше за выбор начинки для йогурта.

Когда я устанавливаю в поле priceзначение

t.decimal   :price, precision:8, scale:2

, база данных сохраняет 6,50как 6,5.Я знаю, что в стандартном режиме рельсов вы вызываете number_to_currency(price), чтобы получить отформатированное значение в представлениях. Мне нужно программно вызвать поле price, а также отформатированную строку, то есть $6,50 в нескольких местах, которые не являются непосредственной частью представления. Кроме того, мои потребности просты (без конвертации валюты и т. д.), я предпочитаю, чтобы цена была универсально отформатирована в модели без повторного вызова number_to_currency в представлениях.

Есть ли хороший способ изменить мой метод получения цены таким образом, чтобы он всегда возвращал два десятичных знака со знаком доллара, то есть 6,50 долларов США при вызове?

Заранее спасибо.

ОБНОВЛЕНИЕ

Всем спасибо.

Я решил использовать подход Алекса, потому что это кажется очень «хакерским» для включения только для форматирования числа. Используя его подход, я сделал:

  def price_change=(val)
      write_attribute :price_change, val.to_s.gsub(/[\$]/,'').to_d
  end

  def price_change
    "$%.2f" % self[:price_change]
  end

Ура.

ОБНОВЛЕНИЕ 2

Внимание! Как только вы это сделаете, вы потеряете возможность выполнять операции с числом, потому что теперь это строка.

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

5
задан Damon Aw 8 April 2012 в 07:29
поделиться