0
1

More than 1 year has passed since last update.

Migrationファイルを操作する

Last updated at Posted at 2021-10-18

Ruby On RailsのMigrationファイルの操作についてまとめ。
すぐ忘れるので。

Migration ファイルを追加

モデル作成

ターミナル
# モデルを作成
rails g model User name:string introduction:string
db/migrate/XXX_create_users.rb(XXXは作成日時)
class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :introduction

      t.timestamps
    end
  end
end
db/schema.rb
ActiveRecord::Schema.define(version: 2021_07_15_224955) do
  create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "introduction"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end
end

Addカラム

ターミナル
# モデルにカラムを追加
rails g migration AddAgeToUsers age:integer
db/migrate/XXX_add_age_to_users.rb(XXXは作成日時)
class AddAgeToUsers < ActiveRecord::Migration[6.1]
  def change
    add_column :users, :age, :integer
  end
end
db/schema.rb
ActiveRecord::Schema.define(version: 2021_07_15_225334) do
  create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "introduction"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "age"
  end
end

カラム削除

ターミナル
# モデルからカラムを削除
rails g migration RemoveIntroductionFromUsers introduction:string
db/migrate/XXX_remove_introduction_from_users.rb(XXXは作成日時)
# removeの時はupとdownを設定しておくとrollbackしやすい
class RemoveIntroductionFromUsers < ActiveRecord::Migration[6.1]
  def up
    remove_column :users, :introduction
  end

  def down
    add_column :users, :introduction, :string
  end
end
db/schema.rb
ActiveRecord::Schema.define(version: 2021_07_15_225514) do
  create_table "users", force: :cascade do |t|
    t.string "name"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "age"
  end
end

カラム修正

ターミナル
# モデルからカラムを削除
rails g migration rename_name_column_to_Users
db/migrate/XXX_remove_introduction_from_users.rb(XXXは作成日時)
# Userモデルのnameカラムをfirst_nameカラムに変更
class RenameNameColumnToUsers < ActiveRecord::Migration[6.1]
  def change
    rename_column :Users, :name, :first_name
  end
end
code string integer float datetime time date boolean
データ型 文字列 整数 浮動小数 日時 時間 日付 Boolean

Migration ファイルの修正

ターミナル
# ステータスを確認
rails db:migrate:status

# downさせる
rails db:migrate:down VERSION=20200504051127

# down状態にしてから、マイグレーションを修正する

# 再度upさせる
$ rails db:migrate:up VERSION=20200504051127

Migration ファイルの削除

ターミナル
# マイグレーションファイルの状態を確認
rails db:migrate:status

# 削除するときはstatusをdownにする
rails db:migrate:down VERSION=Migration ID

# 削除する
rm db/migrate/20210323030224_hoge.rb

NO FILEのMigration ファイルの削除

ターミナル
# NO FILEのままupされているので、適当な名前で再度作り直してから削除する
touch db/migrate/20210323030224_hoge.rb

ファイルの中身を記述する

20210323030224_hoge.rb
class Hoge < ActiveRecord::Migration[5.0]
  def change
  end
end
ターミナル
# migrationファイルを適応する
rails db:migrate

# downする
rails db:migrate:down VERSION=20210323030224_Hoge.rb

# 削除する
rm db/migrate/20210323030224_hoge.rb

参考資料

rails generate migrationコマンドまとめ
【Rails】 マイグレーションファイルを徹底解説!
新しいマイグレーションを追加してテーブルを変更
Ruby on Rails カラムの追加と削除
【Rails】migrationのchangeとup/downって何が違うの?
Rails カラム名変更方法
Railsで過去履歴のmigrationを修正して再実行する
【Rails】マイグレーションファイルの削除

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1