Rails: schema.rbは何をするのか?
2023-08-10 09:22:55
質問
私は、以前は
db/schema.rb
の中に
Rails
プロジェクトはデータベーススキーマを格納し、そのため
ActiveRecord
はどのようなテーブル/カラムを持っているかを知ることができます。
しかし、先ほど、私は驚いたことに、私のプロジェクトは、私が削除した後に正常に実行されることに気づきました。
db/schema.rb
!
ということは
Rails
はなくても動作するので
schema.rb
は本当に機能しているのでしょうか?
どのように解決するのですか?
この
schema.rb
は主に2つの目的を果たします。
-
データベーススキーマの最終的な現在の状態を文書化します。多くの場合、特に数回以上のマイグレーションがある場合、マイグレーションだけからスキーマを推論するのは困難です。現在の
schema.rb
があれば、そこを見るだけでいいのです。ActiveRecord自身は、さすがにそれを使うことはないでしょう。実行時にデータベースをイントロスペクトします。schema.rb
を最新に保つことを期待するより安全だからです。しかし、開発者の混乱を避けるために、常に最新のマイグレーションファイルを維持する必要があります。 -
これはデータベーススキーマを投入するためにテストによって使用されます。そのため
rake db:schema:dump
はしばしば rake の一部として実行されます。test:prepare
を実行します。その目的は、テスト用データベースのスキーマが現在の開発用データベースと正確に一致するようにするためです。
関連
-
[解決済み】OS X Yosemite 10.10.5 で [Ruby on Rails] 5 をインストールすると extconf が失敗して終了コード 1 エラーになる。
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] Railsはsaveでモデル内の検証をスキップしますか?
-
[解決済み] rails/rubyでgroup_byを使用する。
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み] Railsでモデルの属性を発見する方法は?
-
[解決済み] Rails は、データベースに対して実行されたマイグレーションをどのように追跡しているのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] rake db:migrateを使って1ステップだけロールバックする方法
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] nil:NilClass の未定義メソッド `each' - しかし、なぜ?
-
[解決済み] Railsはsaveでモデル内の検証をスキップしますか?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] rails/rubyでgroup_byを使用する。