Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[Rails]my sqlのテーブルとmigrationファイルを削除した際に生じた不具合の解決手順

【前提】
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として残ってしまった
Image from Gyazo
↑上記はその際に残ってしまったschemaファイルの内容
・versionの表示が消えた状態でdownにならず残ってしまっていた
本来、このファイル名にはMigrationIDがあるはず
がここでは”000”となってしまっている

【エラーの解決手順】
①statusをdownにする為にdb/migrate配下に新しく名前を”000_create_users_artists.rb”としてmigrationファイルを作成。
:point_right: 他のmigrationファイルの名前と同様とするためにcreateを名前の先頭に付与して以下のように記述しました。

000_create_users_artists.rb
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ファイルに誤って残った記述内容と削除する為に作成したファイル名やカラム名の記述内容を同じにしないとうまくデータが消せなかったのでかなり苦戦しました:joy:苦戦した事でかなり勉強になり、自身の強みにもなったので内容をまとめて投稿してみました。誰かの参考になれば幸いです!!

homuranotori
プログラミング初心者です。エラー解決や実装した内容を忘れないよう備忘録がわりに発信をしています。宜しくお願いします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away