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

23 lines
1.1 KiB
Markdown
Raw Normal View History

2017-03-20 15:35:19 +00:00
+++
date = "2012-08-28"
title = "Rails migrations: decimal precision and scale"
tags = ["Rails", "migrations", "postgresql"]
slug = "rails-migrations-decimal-precision-and-scale"
+++
2015-03-26 11:28:08 +00:00
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:
2017-03-20 15:35:19 +00:00
``` ruby
change_column :products, :discount_percentage, :decimal, precision: 5, scale: 2
```
2015-03-26 11:28:08 +00:00
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]
2017-03-20 15:35:19 +00:00
[1]: http://www.postgresql.org/docs/9.1/static/datatype-numeric.html