前提・実現したいこと
特定のマイグレーションファイルをロールバックして、カラムを追加したい
発生している問題・エラーメッセージ
# rails db:migrate:status -> Status Migration ID Migration Name -------------------------------------------------- up 20210123081945 Devise create users up 20210204234803 Create rooms up 20210205011404 Create room users # bundle exec rails db:migrate:down VERSION=20210123081945 -> StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails /Users/users/projects/ファイル名/bin/rails:9:in `<top (required)>' /Users/users/projects/ファイル名/bin/spring:15:in `require' /Users/users/projects/ファイル名/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: ActiveRecord::InvalidForeignKey: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails /Users/users/projects/ファイル名/bin/rails:9:in `<top (required)>' /Users/users/projects/ファイル名/bin/spring:15:in `require' /Users/users/projects/ファイル名/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails /Users/users/projects/ファイル名/bin/rails:9:in `<top (required)>' /Users/users/projects/ファイル名/bin/spring:15:in `require' /Users/users/projects/ファイル名/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:migrate:down (See full trace by running task with --trace)
該当のソースコード
- マイグレーションファイル
usersとroomsは多対多の関係
20210123081945
1def change 2 create_table :users do |t| 3 ## Database authenticatable 4 t.string :username, null: false 5 t.string :email, null: false, default: "" 6 t.string :encrypted_password, null: false, default: "" 7 t.integer :followed, null: false, default: 0 8 t.integer :random_user, null: false, default: "#{Faker::Number.hexadecimal(digits: 6)}" 9 end 10end 11
20210204234803
1def change 2 create_table :rooms do |t| 3 t.string :thread_name, null: false 4 t.timestamps 5 end 6end
20210205011404
1def change 2 create_table :room_users do |t| 3 t.references :user, foreign_key: true 4 t.references :room, foreign_key: true 5 t.timestamps 6 end 7end
- モデル
user
1 has_many :room_users 2 has_many :rooms, through: :room_users
room
1 has_many :room_users 2 has_many :users, through: :room_users
roomuser
1 belongs_to :room 2 belongs_to :user
試したこと
- モデルに
dependent: :destroy
を記述
user
1 has_many :room_users, dependent: :destroy 2 has_many :rooms, through: :room_users
room
1 has_many :room_users, dependent: :destroy 2 has_many :users, through: :room_users
・他のマイグレーションファイルがロールバックできるか試した。
←userとroomのみ同じエラーが出て、それ以外はロールバックできた
すみませんが、ご教授願います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/02 03:48
2021/03/02 05:23
2021/03/02 08:07