マイグレーションファイルについて
マイグレーションファイルとは
データベースの設計図。
マイグレーションファイルを実行すれば、マイグレーションファイルを元にDBが作成される。
→マイグレーションファイルを作成しただけではDBに反映されない。
マイグレーションファイルを作成
rails g migration マイグレーション名
rails generate model モデル名 カラム名:型 カラム名:型
$ be rails g model ApiKey user:references access_token:string expires_at:datetime Running via Spring preloader in process 47115 invoke active_record create db/migrate/20200719073831_create_api_keys.rb create app/models/api_key.rb invoke rspec create spec/models/api_key_spec.rb invoke factory_bot create spec/factories/api_keys.rb
マイグレーションファイルを実行
dbにマイグレーションファイルの内容が反映された。
$ be rails db:migrate == 20200719073831 CreateApiKeys: migrating ==================================== -- create_table(:api_keys) -> 0.0065s -- add_index(:api_keys, :access_token, {:unique=>true}) -> 0.0020s == 20200719073831 CreateApiKeys: migrated (0.0091s) ===========================
DBに反映されているマイグレーションファイルを確認する
upと書いているファイルがデータベースに反映されているもの(マイグレーション済みということ)
$ rails db:migrate:status database: db/learning_api_development Status Migration ID Migration Name -------------------------------------------------- up 20200627072315 Sorcery core up 20200627073523 Create social profiles up 20200627074538 Create articles up 20200627075238 Create comments up 20200719073831 Create api keys
スキーマファイルで現在のDBの構造を確認する
マイグレーションファイルの内容をDBに反映されていない状態に戻す
rails db:rollbackで、最新のマイグレーションファイルをdown状態にできる。
down状態のマイグレーションファイル = データベースに反映されていない状態にあるということ。
※up状態にあるマイグレーションファイルを削除・編集することは避けよう。
rails db:rollback
be rails db:reset
全てのテーブルを dropし、"db/schema.rb"を元にテーブルの再作成を行う。レコードは空になる。
be rails db:migrate:reset
migrateとresetを両方行う。
$ be rails db:migrate:reset Dropped database 'db/runteq_curriculum_learning_api_development.sqlite3' Dropped database 'db/runteq_curriculum_learning_api_test.sqlite3' Created database 'db/runteq_curriculum_learning_api_development.sqlite3' Created database 'db/runteq_curriculum_learning_api_test.sqlite3' == 20200627072315 SorceryCore: migrating ====================================== -- create_table(:users) -> 0.0037s -- add_index(:users, :email, {:unique=>true}) -> 0.0021s == 20200627072315 SorceryCore: migrated (0.0060s) ============================= == 20200627073523 CreateSocialProfiles: migrating ============================= -- create_table(:social_profiles) -> 0.0093s == 20200627073523 CreateSocialProfiles: migrated (0.0094s) ==================== == 20200627074538 CreateArticles: migrating =================================== -- create_table(:articles) -> 0.0058s == 20200627074538 CreateArticles: migrated (0.0059s) ========================== $ rcs Running via Spring preloader in process 60310 Loading development environment in sandbox (Rails 6.0.2.1) Any modifications you make will be rolled back on exit [1] pry(main)> User.first (0.3ms) begin transaction User Load (0.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] => nil
be rails db:seed
Seedファイルのデータを、テーブルのレコードに投入
$ be rails db:seed $ rcs Running via Spring preloader in process 60874 Loading development environment in sandbox (Rails 6.0.2.1) Any modifications you make will be rolled back on exit [1] pry(main)> User.first (1.7ms) begin transaction User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] => #<User:0x00007fb1841d4808 id: 1, name: "user-1", email: "user-1@example.com", crypted_password: "$2a$10$FWgdOQ7TTpcNzgGVxhRLfus46sJg8WP3DPi0yvj4U72rH7RW0PMxa", salt: "8QYWYUM7Vb-yp44eVzBP", created_at: Sun, 19 Jul 2020 08:06:58 UTC +00:00, updated_at: Sun, 19 Jul 2020 08:06:58 UTC +00:00>