Skip to main content

Rails migrations: decimal precision and scale

·130 words·1 min· ·
Rails Migrations Postgresql
Ariejan de Vroom
Author
Ariejan de Vroom
Jack of all Trades, Professional Software Craftsman

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:

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

Related

Capistrano and the custom maintenance page
·541 words·3 mins
Capistrano Rails Git Migrations Deployment Maintenance
Once and for all: Rails migrations integer :limit option
·99 words·1 min
MySQL Ruby on Rails Rails Sql Migrations Integer Limit
Search and Replace in multiple files with Vim
·269 words·2 mins
Rails Vim