Publiquem Acts As Decimal
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! :)'