Rails: what does schema.rb do?

前端 未结 2 1404
暗喜
暗喜 2020-12-12 23:37

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

2条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-13 00:01

    The schema.rb serves mainly two purposes:

    1. 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.

    2. 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.

提交回复
热议问题