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】マイグレーションファイルの削除