マイグレーションの実行
実行されていないchangeアタはupメソッドを実行する。
マイグレーションの実行順序は日付に基づく。
# マイグレーションを実行するrailsコマンド。db:schema:dumpコマンドも同時に呼び出される $ rails db:migrate
db:schema:dumpコマンドは、db/schema.rbスキーマファイルを更新し、
スキーマ(DB構造の設計図)がデータベースの構造に一致するようにする。
articleモデル(title:string, text:text)をgenerateした場合、rails db:migrate実行で作成されるschema.rbは以下の通り。
# db/schema.rb create_table "articles", force: :cascade do |t| t.string "title" t.text "text" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end
migrationの状態を確認
migrationのupまたはdown状態を確認するには以下のコマンドを使用する。
$ rails db:migrate:status
例えば、userモデルを作成するとき、以下のようになる。
# rails g model user前 database: db/development.sqlite3(以降省略) Status Migration ID Migration Name -------------------------------------------------- up 20201106213850 Create articles up 20201107132603 Create comments # rails g model user後 Status Migration ID Migration Name -------------------------------------------------- up 20201106213850 Create articles up 20201107132603 Create comments down 20201123074249 Create users # rails db:migrate後 Status Migration ID Migration Name -------------------------------------------------- up 20201106213850 Create articles up 20201107132603 Create comments up 20201123074249 Create users
rails db:rollbackすると以下のようになる。
Status Migration ID Migration Name -------------------------------------------------- up 20201106213850 Create articles up 20201107132603 Create comments down 20201123074249 Create users
rails db:rollbackせずにmigrationを消してしまうと、migration nameの箇所がno fileという記載になり、
rails db:migrateやrollbackなどのコマンドが全てエラーになってしまう。
その時はtouchコマンドでno fileになっているmigration fileを新規作成し、
中にデフォルトの情報を入力して仮のfileを作成し、rollbackをさせてrails db:versionで表示される最新migration fileを合わせ、削除する等を行うことでエラーを回避できる。
最新のversionを確認
$ rails db:version
状態確認
# rails db:migrate:status Status Migration ID Migration Name -------------------------------------------------- up 20201106213850 Create articles up 20201107132603 Create comments down 20201123074249 Create users # rails db:version Current version: 20201107132603