I used to think the db/schema.rb
in a Rails
project stored the database schema, so that ActiveRecord
can know what table/column it has
The schema.rb
serves mainly two purposes:
It documents the final current state of the database schema. Often, especially when you have more than a couple of migrations, it's hard to deduct the schema just from the migrations alone. With a present schema.rb
, you can just have a look there. ActiveRecord itself will indeed not use it. It will introspect the database during runtime as this is much safer than to expect users to keep the schema.rb
up-to-date. However to avoid confusion of your developers, you should always maintain a file that is up-to-date with your migrations.
It is used by the tests to populate the database schema. As such a rake db:schema:dump
is often run as part of the rake test:prepare
run. The purpose is that the schema of the test database exactly matches the current development database.