【Rails】データベースのテーブル、カラムの変更手順
本題に入る前に
概要
基本的に、
$ rails migration hogehoge
でマイグレーションファイルの作成、
マイグレーションファイルの編集後、
$ rails db:migrate
の流れで適用できる。
マイグレーションファイル作成コマンドを適切に入力すれば、
マイグレーションファイルの編集の必要はなくなる。
rollbackは?
Rollbackはあまりしない方がいい。
個人開発であれば問題ない場合もあるが、チーム開発の場合コードに辻褄が合わなくなることがある。
テーブル、カラムの状態を確認
db/schema.rbに記載されている。
テーブル名、カラム名、データ型の内容が記載されている。
本題
カラム関連
カラムを追加したい時
【例】reviewsテーブルにinteger型のuser_idカラムを追加したい時
$ rails g migration AddUser_idToReviews user_id:integer
↓
$ rails db:migrate
↓
$ rails db:migrate
カラム名を変更したい時
$ rails g migration rename_変更したいカラム名_column_to_テーブル名
↓
エディターで生成されたファイルを編集
ename_column テーブル名, 変更前のカラム名, 変更後のカラム名
class RenameJobNameColumnToJobs < ActiveRecord::Migration[6.0]
def change
rename_column :jobs, :job_name, :name
end
end
↓
$ rails db:migrate
カラムのデータ型を変更したい時
【例】reviewsテーブルのjob_idのデータ型をintegerからbigintに変更
$ rails g migration ChangeDatatypeJob_idOfReviews
↓
生成したマイグレーションファイルを編集
change_column :テーブル名, :変更するカラム名, :変更するデータ型
db/migrate/〇〇_change_datatype_job_id_of_reviews.rb
class ChangeDatatypeJobIdOfReviews < ActiveRecord::Migration[6.0]
def change
change_column :reviews, :job_id, :bigint
end
end
↓
$ rails db:migrate
カラムを削除したい時
rails g migration Removeカラム名From削除元テーブル名 削除するカラム名:データ型
例 Jobsテーブルのuser_idカラムを削除したい時
$ rails g migration RemoveUser_idFromJobs user_id:integer
↓
$ rails db:migrate
テーブル関連
テーブルを削除したい時
【例】usersテーブルを削除したい時
$ rails g migration users
↓
マイグレーションファイル編集
db/migrate/〇〇_users.rb
class Users < ActiveRecord::Migration[6.0]
def change
drop_table :users
end
end
↓
$ rails db:migrate
テーブル名を変更したい時
テーブル名を修正した後、
モデル、コントローラーも修正が必要。こちらの記事が参考になります。
マイグレーションファイルを削除したい時
【例】画像の赤線のマイグレーションファイルを消す
マイグレーションの状態を確認。
$ rails db:migrate:status
↓
消したいマイグレーションファイルのバージョンを指定
$ rails db:migrate:down VERSION=20220517081311
↓
Down状態になったか確認後、
$ rm db/migrate/20220517081311add_devise_to_accounts.rb(消したいマイグレーションファイル名)
以上です。
間違いがあればご指摘いただけますと幸いです。
Discussion