devroom.io/drafts/2012-08-28-rails-migrations-decimal-precision-and-scale.md

24 lines
1.2 KiB
Markdown
Raw Normal View History

2013-03-22 22:53:57 +00:00
---
title: "Rails migrations: decimal precision and scale"
kind: article
slug: rails-migrations-decimal-precision-and-scale
created_at: 2012-08-28
tags:
- Rails
- migrations
- postgresql
---
I'm always confused when using `decimal` in a Rails migration. Normally I need to store a value that has 2 or 3 numbers behind the comma (or dot), or decimals.
Let's say you have a `Product` model with a `discount_percentage` attribute. This attribute is currently an integer, only allowing non-decimal values. To allow 2 digit decimal values (e.g. `12.54`), you can mak the following migration:
:::ruby
change_column :products, :discount_percentage, :decimal, precision: 5, scale: 2
This will allow you to store values like `80.00`, `99.99` and `100.00`. There are five digits in the entire number and of those five, two decimals.
It's not necessary so specify `precision` and `scale` as your database will then allow any decimal value it can store.
Read more about the `decimal` data type in PostgreSQL here: [http://www.postgresql.org/docs/9.1/static/datatype-numeric.html][1]
[1]: http://www.postgresql.org/docs/9.1/static/datatype-numeric.html