Publiquem Acts As Decimal

Added by Txus on June 23, 2010 in rails3 ruby gems activerecord decimal
Imatge de ubergizmo

Darrerament hem estat treballant amb alguns projectes de Rails 3 on necessitàvem tractar amb preus. Ja que els preus són naturalment variables de punt flotant (12.95, 297.50...) enteniem que havien de ser tractats com a tals, però malgrat tot, per a evitar pèrdues de precisió (els preus són sensibles, ja se sap!), volíem desar-los com a enters a la base de dades.

Per què no fem una simple gemma aleshores?

Llavors se'ns va acudir de fer aquesta petita gemma, i ens enorgullim de presentar-la als nostres lectors. Potser fins i tot fa les vostres vides de desenvolupador una mica més agradables :)'

La gemma està allotjada a Github i publicada també a Gemcutter, de manera que és molt fàcil d'instal·lar i fer servir. Depèn només d'ActiveRecord 3.0.0.

Al vostre Gemfile:

gem 'acts_as_decimal'

Aleshores, al vostre model:

class Product < ActiveRecord::Base
  acts_as_decimal :price                   # Defaults to 2 decimals, or...
  acts_as_decimal :price, :decimals => 5   # ... as you wish!
end

Ara podeu desar valors a :price i recuperar-los com a punt flotant:

product = Product.new
product.price = 12.30
product.price         # => 12.30 

Però també teniu accés a les dades en enter de la base de dades a través de :price_raw:

product.price_raw         # => 1230
product.price_raw = 4309  # => product.price == 43.09

A més, està disponible també un humanitzador per a l'atribut. Tingueu en compte que retorna una cadena, no un punt flotant.

product = Product.new
product.price = 3900400.40
product.humanized_price
# => "3.900.400,40"
product.humanized_price(:thousand_delimiters => false)
# => "3900400.40"

Estem pensant també en desenvolupar alguns matchers per a Remarkable de seguida que poguem!

I això és tot. Esperem que ho trobeu d'utilitat, i si considereu que li falta alguna funcionalitat interessant, us animem a contribuïr! :)'