2ord
@2ord

Как при помощи BigDecimal.as_json отформатировать сумму BigDecimal «1.20» не в «1.2», а в «1.20»?

При сериализации экземпляра объекта в при помощи .as_json один из атрибутов типа BigDecimal(8,2) сериализуется без нуля, т.е. так:
> BigDecimal.new("1.20").as_json
=> "1.2"
Т.е. отсутствует конечная цифра 0 в цене.

Пробный код на примере Struct:
Price = Struct.new(:product, :money)
obj = Price.new 'квас', BigDecimal.new("1.20")
puts obj.to_json
=> {"product":"квас","money":"1.2"}

Каким образом можно переопределить BigDecimal.as_json, чтобы сумма форматировалась как nnn.nn?
Мне нужно так отформатировать:
'%.2f' % BigDecimal.new("1.20")

Только мне нужно переопределить локально, в пределах одной модели ActiveRecord, а не глобально.

Rails 4.2, Ruby 2.3, gem json 1.8.3
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
2ord
@2ord Автор вопроса
Чего-то сразу не догадался о таком простом решении:
h = my_model.as_json
h[:price] = '%.2f' % my_model.price  # переопределяем результат BigDecimal.as_json с новым форматированием строки
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы