Работа с точными единицами в Rails 3 - PullRequest
2 голосов
/ 02 апреля 2011

Кто-нибудь имеет опыт работы с / может кто-нибудь предложить лучшие практики для хранения величин с большими вариантами по величине?

Например, атрибут в одной из моих моделей используется для хранения веса, который может быть от нескольких микрограммов до килограмма или более. Я предполагаю преобразовать все в наименьшую единицу и сохранить ее в базе данных как целое число (поскольку я могу потерять точность с помощью числа с плавающей запятой?), Но кажется странным хранить килограммовые количества в микрограммах ..

Кто-нибудь может предложить плагин ruby ​​/ rails, который может помочь с таким поведением, в более общем смысле? Точно так же, как поле 'time' в базе данных преобразуется в объект Time в ruby, как мне лучше всего перехватить процесс database entry -> class attribute, преобразовав поле в мой класс по выбору?

Есть ли шаблон проектирования для хранения переменных величин, о котором я просто не думаю?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

Если важна точность, то то, что вы предлагаете, является хорошей идеей. Сохраните ли вы целую сумму в наименьшей единице, которую вы можете измерить, в валюте или весах.

В качестве альтернативы используйте BigDecimal, что обеспечивает поддержку произвольной точности (как в «вы получаете выбор точности», а не в Ruby-randomly-choses-it). Хорошая поддержка для хранения этого зависит от вашей базы данных - например, PostgreSQL предоставляет NUMERIC тип данных именно для этой цели - и требует поддержки от вашего ORM (предположительно ActiveRecord, который поддерживает это в миграциях через :decimal тип столбца).

Даже если деньги обычно меняются на порядки меньше разницы между микрограммами в килограммах, у вас не возникнет никаких проблем, если вы будете обрабатывать это как деньги и просто установите свою точность соответствующим образом.

0 голосов
/ 02 апреля 2011

Относительно проблемы времени: для этого вам не нужен плагин rails.Для этого у вас есть агрегации Rails:

Миллисекунды с Rails и Mysql (Является ли ваш вопрос намеренным дубликатом этого?!)

Что касается точности.Это всего лишь вопрос использования лучшего типа, доступного в СУБД.

...