前提・実現したいこと
現在、Ruby on Rails(Rails 5.0.7.2)にてフリマアプリ作成を行っています。
間違えて作成してしまったテーブルカラムを削除したいのですがrollbackできなくなってしまった。
状況詳細
もともと作成してあったモデルテーブルにカラムを追加したかったため
マイグレーションファイルを新規作成→外部キー付きカラムを追加。
カラム名を変更した際、rollbackせずに名前を修正(credit→credit_card)→そのままdb:migrate
誤りに気づき、rollbackして修正後のカラムを削除したのですが、schema.rbファイルには
修正前、修正後、どちらのカラムも残ったまま。
sequel proにも、どちらも存在する状態
↓
credit_id(修正前)
credit_card_id(修正後)
カラム追加のため作成したマイグレーションファイルの現状
class AddCreditToUsers < ActiveRecord::Migration[5.0] def change add_reference :users, :credit_card, foreign_key: true end end
発生しているエラーメッセージ
PC ECapp % rails db:rollback == 20200314043753 AddCreditToUsers: reverting ================================= -- remove_reference(:users, :credit_card, {:foreign_key=>true}) rails aborted! StandardError: An error has occurred, all later migrations canceled: Table 'users' has no foreign key for {:to_table=>"credit_cards"} /Users/PC/Documents/GitHub/ECapp/bin/rails:9:in `require' /Users/PC/Documents/GitHub/ECapp/bin/rails:9:in `<top (required)>' /Users/PC/Documents/GitHub/ECapp/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: ArgumentError: Table 'users' has no foreign key for {:to_table=>"credit_cards"} /Users/PC/Documents/GitHub/ECapp/bin/rails:9:in `require' /Users/PC/Documents/GitHub/ECapp/bin/rails:9:in `<top (required)>' /Users/PC/Documents/GitHub/ECapp/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:rollback (See full trace by running task with --trace) PC@PC ECapp % rails db:migrate PC@PC ECapp % rails -v Rails 5.0.7.2
試したこと
rollbackできないので、内容がいまどうなっているのかdb:migrateしたところ
schema.rbファイルからadd_foreign_key "users", "credit_cards"が削除されていました。
rollbackし忘れて修正、db:migrateした場合の参考記事が見つからず困っています。
今現在「カラム追加のため作成したマイグレーションファイルの現状」、のマイグレーションファイルが
あるにもかかわらずその内容の外部キーはないというエラーがでていますがなぜかわかりません。
なにかアドバイスありましたらいただけますでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。