Comment dois-je travailler avec Money avec MongoID? Dois-je le configurer en BigDecimal? Et au niveau des rails? Pour ActiveRecord nous avons quelque chose appelé Money, mais AFAIK il prend seulement en charge ARreprésentation de l'argent dans mongoid
Répondre
MongoDB stocke des numéros dans divers types de données BSON (int, long int, double). Je vous recommande de stocker l'argent en cents (si la devise américaine) et d'utiliser le type de données int long.
J'ai couru dans ceci aussi. Malheureusement BigDecimal stocke dans Mongodb sous la forme d'une chaîne, donc il ne vous laissera pas additionner, trier, etc comme un float ou un int.
Entier semble être le moyen d'aller stocker la valeur en cents, en utilisant peut-être le joyau de l'argent à l'abstrait un peu: https://github.com/RubyMoney/money
Mongo stocke l'int en utilisant 64 bits sur la plupart des machines modernes, je pense donc il est pas beaucoup de risque d'avoir besoin d'une plus grande quantité, même en cents. Il semble que vous puissiez stocker entre -9.223.372.036.854.775.808 et 9.223.372.036.854.775.807 cents, alors prenez deux décimales pour obtenir votre valeur min/max en dollars.
Je vous recommande d'essayer l'argent-rails comme une alternative. https://github.com/RubyMoney/money-rails Il est plutôt bien entretenu et fonctionne avec mongoid aussi!
Si vous aimez la gemme de l'argent, vous pouvez le stocker comme un type d'argent.
Un exemple: https://gist.github.com/michaelkoper/5007636
Il stocke l'argent comme un tableau [cents, monnaie]
class Product
include Mongoid::Document
field :price, type: Money
end
product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"
- 1. Questions de syntaxe Mongoid
- 2. Problème de pagination Mongoid
- 3. Représentation graphique de la représentation graphique
- 4. représentation de l'adresse dans l'ada
- 5. Représentation graphique dans Haskell
- 6. mongoid new versus build
- 7. Association Polymorphe Relationnelle Mongoid
- 8. MongoId problème interrogation
- 9. mongoid ordering problem
- 10. Transformer la représentation typées d'un DSL dans la représentation typée
- 11. MongoId/problème version activesupport
- 12. mongoid, set_table_name & attr_accessible
- 13. Mongoid avec Machinist
- 14. Mongoid self-referencial rejoindre
- 15. MongoId et CanCan Intégrer
- 16. Autorisation déclarative et mongoid
- 17. supprimer un document incorporé dans mongoid
- 18. Comment configurer une référence_one dans Mongoid?
- 19. 'validates_presence_of' ne fonctionne pas bien dans Mongoid?
- 20. 2d représentation de tableau
- 21. Représentation d'entiers dans des doubles
- 22. Mongoid, aide avec les notifications
- 23. conversion de chaîne entre représentation UTF-8 et représentation unicode
- 24. Représentation des différences de temps dans Ruby
- 25. Représentation de méthodes surchargées dans UML
- 26. Représentation de tableau dans le schéma
- 27. Représentation de hiérarchies arbitraires dans WADL
- 28. Alias de champ avec Mongoid et Rails
- 29. Mongoid problème plusieurs à plusieurs
- 30. embarque de nombreuses formes imbriquées, mongoid
ce qui est de l'argent? – shingara
comme décimal, int, flotte ... – luckytaxi
dm a raison. N'utilisez jamais de nombres à virgule flottante pour représenter de l'argent (comme des flotteurs, des doubles). Cela fera beaucoup de butthurt. Vous perdrez des centimes pendant la représentation. Par exemple, 10.2 peut être représenté comme 10.19999 (9). Pendant l'arrondi et les différentes opérations arithmétiques, vous obtiendrez une erreur croissante. [Pourquoi ne pas utiliser double pour représenter la monnaie] (http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency/3730040#3730040) – Dao