ポートフォリオ制作でdocker-composeコマンドを使ってカラムの追加/データ型変更/削除を行ったので備忘録として記載しています。
前提条件
ruby'3.1.3'
rails'7.0.4'
docker-compose '3.8'
apiと書かれた部分は適宜読み替えてください。
既存のテーブルに新しいカラムを追加する
(usersテーブルにbadgeというカラムを追加する例)
1.新しいマイグレーションファイルを作成する
docker-compose run --rm api rails generate migration add_badge_to_users badge:boolean
2.以下のマイグレーションファイルが生成される
class AddBadgeToUsers < ActiveRecord::Migration[7.0]
def change
add_column :users, :badge, :boolean
end
end
3.rails db:migrateを実行
docker-compose run --rm api rails db:migrate
既存カラムのデータ型を変更
(quizzesというテーブルのsentence_japaneseとsentence_englishというカラムのデータ型をtextに変更します)
1.新しいマイグレーションファイルを作成する
docker-compose run --rm api rails generate migration ChangeSentenceEnglishInQuizzes
2.生成されたマイグレーションファイルを開き、change_columuメソッドを使用して、変更したいカラムと新しい型を指定します。
class ChangeSentenceEnglishInQuizzes < ActiveRecord::Migration[7.0]
def change
change_column :quizzes, :sentence_japanese, :text
change_column :quizzes, :sentence_english, :text
end
end
3.rails db:migrateを実行
docker-compose run --rm api rails db:migrate
既存カラムを削除し、新しいカラムを追加する
(postsテーブルの不要なカラム削除と新規カラムを追加する例)
1.新しいマイグレーションファイルを作成する
docker-compose run --rm api rails generate migration ModifyPostsForNewFields
2.生成されたマイグレーションファイルを以下のように編集する
class ModifyPostsForNewFields < ActiveRecord::Migration[7.0]
def change
#既存の不要なカラムを記載
remove_column :posts, :scene, :string
remove_column :posts, :content_english, :text
remove_column :posts, :subject_english, :text
#新たに追加したいカラムを記載
add_column :posts, :title, :string
add_column :posts, :content, :text
add_column :posts, :genre, :string
end
end
3.rails db:migrateを実行
docker-compose run --rm api rails db:migrate
以上