1. ホーム
  2. ruby-on-rails

Rails: schema.rbは何をするのか?

2023-08-10 09:22:55

質問

私は、以前は db/schema.rb の中に Rails プロジェクトはデータベーススキーマを格納し、そのため ActiveRecord はどのようなテーブル/カラムを持っているかを知ることができます。

しかし、先ほど、私は驚いたことに、私のプロジェクトは、私が削除した後に正常に実行されることに気づきました。 db/schema.rb !

ということは Rails はなくても動作するので schema.rb は本当に機能しているのでしょうか?

どのように解決するのですか?

この schema.rb は主に2つの目的を果たします。

  1. データベーススキーマの最終的な現在の状態を文書化します。多くの場合、特に数回以上のマイグレーションがある場合、マイグレーションだけからスキーマを推論するのは困難です。現在の schema.rb があれば、そこを見るだけでいいのです。ActiveRecord自身は、さすがにそれを使うことはないでしょう。実行時にデータベースをイントロスペクトします。 schema.rb を最新に保つことを期待するより安全だからです。しかし、開発者の混乱を避けるために、常に最新のマイグレーションファイルを維持する必要があります。

  2. これはデータベーススキーマを投入するためにテストによって使用されます。そのため rake db:schema:dump はしばしば rake の一部として実行されます。 test:prepare を実行します。その目的は、テスト用データベースのスキーマが現在の開発用データベースと正確に一致するようにするためです。