LoginSignup
0
0

Ruby on Rails カラムの追加/データ型変更/削除

Posted at

ポートフォリオ制作で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

以上

0
0
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
0