24 lines
1.2 KiB
Markdown
24 lines
1.2 KiB
Markdown
|
---
|
||
|
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
|