LoginSignup
study_matome
@study_matome

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Rails】データベース(シークエルプロ)で作ったテーブル自体を削除する方法を教えていただきたいです

Q&AClosed

質問したいこと

現在画像投稿アプリを作成しておりまして、
お気に入り機能を実装しています。

初めての機能だったので練習しようと思い、
本体のアプリの複製でデータベースを作成したところ、
本体のアプリにデータベースが作られてしまいました。

間違えて作ったデータベース(シークエルプロ)のテーブル自体を
削除する方法がありましたら教えていただきたいです。

試したことやエラーメッセージ

①間違えて作成してしまった直後の本体アプリを確認

migrate:status後

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220518051644  Devise create users
   up     20220519121235  Create active storage tablesactive storage
   up     20220519122831  Create items
   up     20220521105855  Create comments
   up     20220523123107  ********** NO FILE **********
  down    20220523124842  Create favorites

② NO FILEを削除するため以下を実行

touch db/migrate/20220523123107_hoge.rb

ダミーファイルを作成

db/migrate/20220523123107_hoge.rb
class Hoge < ActiveRecord::Migration[6.0]
  def change
  end
end
migrate:statusで名前の変更を確認
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220518051644  Devise create users
   up     20220519121235  Create active storage tablesactive storage
   up     20220519122831  Create items
   up     20220521105855  Create comments
   up     20220523123107  Hoge
  down    20220523124842  Create favorites

削除を実行

rm -rf db/migrate/20220523123107_hoge.rb

現状

NO FILEは消去することができました。

migrate:status後
 up     20220518051644  Devise create users
   up     20220519121235  Create active storage tablesactive storage
   up     20220519122831  Create items
   up     20220521105855  Create comments
  down    20220523124842  Create favorites

しかしこの状態でマイグレーションファイルを「rails db:migrate」すると
以下のようなエラーが出てきてしまいました。
NO FILEは消去することができましたが、テーブルは作成済との内容でした。

rails aborted!
StandardError: An error has occurred, all later migrations canceled:

Index name 'index_favorites_on_user_id' on table 'favorites' already exists
/Users/admin/projects/little-artist/db/migrate/20220523124842_create_favorites.rb:3:in `change'
/Users/admin/projects/little-artist/bin/rails:9:in `<top (required)>'
/Users/admin/projects/little-artist/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

Caused by:
ArgumentError: Index name 'index_favorites_on_user_id' on table 'favorites' already exists
/Users/admin/projects/little-artist/db/migrate/20220523124842_create_favorites.rb:3:in `change'
/Users/admin/projects/little-artist/bin/rails:9:in `<top (required)>'
/Users/admin/projects/little-artist/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

複製の方で作成したデータベースがシークエルPROに残ってしまい、
upすることができない状態でした。

スクリーンショット 2022-05-23 22.34.07.png

質問①
このような場合、シークエルのデータベース自体を消去することで
「rails db:migrate」し、正常通りにデータベースを作成することができるのでしょうか?

質問②
もしそうでしたら、削除方法を教えていただくことは可能でしょうか?

質問③
そうでない場合は、モデルを削除し、別なモデル名で行う方法もありますでしょうか?
他の方法がありましたら教えていただけると嬉しいです。

長文になってしまい申し訳ありませんが、
教えていただけますと、とても助かります。

0

1Answer

質問①

favorites テーブルを削除すれば Create favorites マイグレーションを適用できるはずです。(Create tables マイグレーションで favorites テーブルを作っているのであればの話ですが、名前から見てそうなっているだろうと思います。)

質問②

そのスクリーンショットで青くなっている favorites を右クリックして、「テーブルを削除」を選べば削除できます。

1

Comments

  1. @study_matome

    Questioner
    丁寧なご回答、ありがとうございました。

    教えていただいたことを実行したところ、無事にマイグレーションすることができました!
    大変助かりました。

Your answer might help someone💌