【前提】
Rails 6.0.3.1
ruby 2.6.3
現在、オリジナルアプリの製作中。
その際に誤って作ってしまった。users_artistsというテーブルとマイグレーションファイルを削除しようとした際に生じたエラー内容についてまとめてみた。
% rails db:rollback STEP=5
・migrationファイルを削除する為にターミナルにてrollbackを実行。
% rails db:migrate:status
・確認の為、statusを上記コマンドにて確認したところ、一箇所だけ不具合を発見
Status Migration ID Migration Name
--------------------------------------------------
up 000 ********** NO FILE **********
down 20201014111144 Devise create users
down 20201014111251 Devise create artists
down 20201014121517 Create events
down 20201020102544 Create bookmarks
↑一箇所だけstatusがupとなっており、ファイル名もなぜかNO FILEとして残ってしまった
↑上記はその際に残ってしまったschemaファイルの内容
・versionの表示が消えた状態でdownにならず残ってしまっていた
本来、このファイル名にはMigrationIDがあるはず
がここでは”000”となってしまっている
【エラーの解決手順】
①statusをdownにする為にdb/migrate配下に新しく名前を”000_create_users_artists.rb”としてmigrationファイルを作成。
他のmigrationファイルの名前と同様とするためにcreateを名前の先頭に付与して以下のように記述しました。
class CreateUsersArtists < ActiveRecord::Migration[6.0]
def change
create_table :users_artists do |t|
t.integer :user_id
t.integer :artist_id
t.timestamps
end
end
end
②もう一度、rails db:migrate:status
を実行。下記のようにターミナル上にてup部分のMigrationNameがCreate users artists
に変わっている事が確認出来ました。
Status Migration ID Migration Name
--------------------------------------------------
up 000 Create users artists
down 20201014111144 Devise create users
down 20201014111251 Devise create artists
down 20201014121517 Create events
down 20201020102544 Create bookmarks
③再度、statusをdownにするために下記のコマンドにてファイル名を指定して実行。
% rails db:migrate:down VERSION=000_create_users_artists.rb
④再度、指定したファイルのstatusがdownになっているか確認をして不要である000_create_users_artists.rb
のファイルを削除すればOK!!
Status Migration ID Migration Name
--------------------------------------------------
down 000 Create users artists
down 20201014111144 Devise create users
down 20201014111251 Devise create artists
down 20201014121517 Create events
down 20201020102544 Create bookmarks
⑤最後にrails db:migrate
を実行してテーブルを再度、作成し直して終了。
※まとめ※
schemaファイルに誤って残った記述内容と削除する為に作成したファイル名やカラム名の記述内容を同じにしないとうまくデータが消せなかったのでかなり苦戦しました苦戦した事でかなり勉強になり、自身の強みにもなったので内容をまとめて投稿してみました。誰かの参考になれば幸いです!!