Using Postgres as your application’s database? If so, there is a handy
configuration option that you may not be aware about. The pg
gem provides a template
option that
allows for copying already existing data into an application as
long as you have matching schema.
To add this functionality, simply add the template
option inside config/database.yml
:
development:
adapter: postgresql
encoding: unicode
database: myapp_development
template: my_template
Let’s go through a quick example. Suppose we have an existing database, food
, and it contains an abundant amount of data with the
following schema:
foods: name (string), category_id (integer)
categories: category (string)
To use the food
database for our application, we are going to
create a template by specifying our database with the following command:
createdb -T food my_food_template
We must now set up our Rails application and make sure that our schema matches
that of our new template. Our Rails models will mimick food
. Having done
that, we can now modify our config/database.yml
.
database: myapp_development
template: my_food_template
Run migrations and voilà! Our database has been populated and is ready to be used.
> psql myapp_development
> select * from foods;
id | name | category_id
--------------------------
1 apple 1
2 banana 1
3 spinach 2
4 ice cream 3
> select * from categories;
id | category
--------------
1 fruit
2 vegetable
3 other