マイグレーションファイルのカラムを削除するには
今回はマイグレーションファイルを作成した後に、「あれ?このカラム使わないな、」と思った時にカラムを削除する方法を紹介したいと思います。
1. 仮のマイグレーションファイルを作成する
マイグレーションファイルを作る際のコマンド
rails generate migration Add(カラム名)To(テーブル名) (カラム名):データ型
筆者の例として
マイグレーションファイルを作る際のコマンド
rails generate migration Add(カラム名)To(テーブル名) (カラム名):データ型
usersテーブルにstring型のnameカラムとimageカラムを作成したとします。
rails g migration AddNameToUsers name:string image:string
このコマンドを打つと下記のようなマイグレーションファイルが作成されます。
class AddColumnsToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :name, :string
add_column :users, :image, :string
end
end
2. カラムの削除
マイグレーションファイルを削除する際のコマンド
rails generate migration Remove(カラム名)To(テーブル名) (カラム名):データ型
マイグレーションファイルを削除する際のコマンド
rails generate migration Remove(カラム名)To(テーブル名) (カラム名):データ型
とコマンドを打つとカラムを削除するための新たなマイグレーションファイルが作成されます。
開発を進めていく中でimageカラムやっぱりいらないな、と思ったら
rails g migration RemoveNameToUsers image:string
と打つことで
class RemoveColumnsToUsers < ActiveRecord::Migration[5.2]
def change
remove_column :users, :image, :string
end
end
というマイグレーションファイルができます。
この後は
rails db:migrate
と打つことで無事usersテーブルのimageカラムは消えています。スキーマを確認してもらえるとカラムが消えているのが確認しやすいです。
番外編. 間違えて削除のコマンド打ってしまった場合の対処法(筆者の失敗例をもとに)
筆者が実際に削除用のマイグレーションのコマンドを打ち間違えてしまい
rails g migration RemoveNameToUsers
と打ってしまいできてしまったマイグレーションファイルがこちらです↓
class RemoveColumnsToUsers < ActiveRecord::Migration[5.2]
def change
end
end
削除用のカラムが記載されていないファイルができてしまいました・
このファイルは削除しないといけません。まずは削除できる状態にあるか確認をします。
bundle exec rake db:migrate:status
このコマンドを打つとstatusがupになっていると思いますがこの状態だと削除することができません。
upをdownに変えてあげて削除できる状態にします。
bundle exec rake db:migrate:down VERSION=MigrationIDから始まるファイル名を入れる
これでいまstatusがdownになっているのであとは
rm -rf db/migrate/MigrationIDから始まるファイル名を入れる
これでマイグレーションファイルの削除が完了したのでこの記事のカラムを削除するマイグレーションファイルを作成するところから初めて行けば大丈夫です。
いかがだったでしょうか?ぜひ参考にしていただけると幸いです!
Author And Source
この問題について(マイグレーションファイルのカラムを削除するには), 我々は、より多くの情報をここで見つけました https://qiita.com/hayata1029/items/c9a0e66216ce9891fe07著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .