##関係性
ツイートに対してコメントができるようにしています
tweet.rb
has_many :comments,dependent: :destroy
comment.rb
belongs_to :tweet
##エラー
ツイートのマイグレーションファイルをロールバックしようとするとエラーが発生
ActiveRecord::StatementInvalid: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails: DROP TABLE `tweets`
Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails
##原因
####外部キーの参照整合性が原因
外部キー(FOREIGN KEY)とは、関連したテーブル間を結ぶために設定する列のことで、データの整合性をデータベースに保証させるために利用します。
今回でいうと、もしツイートのマイグレーションをロールバックした場合、Tweetモデル自体が無くなってしまうので、コメントがどのツイートに対してのコメントなのか判断ができなくなってしまいます。
#####commentsテーブル
tweetsテーブルに保存されている、id1のツイートに対してのコメントという意味です。
Tweetモデルが削除されてしまうと、tweet_idって何?ってなってしまいます。
なので上記のエラーが発生してしまいます。
id | user_id | tweet_id | text |
---|---|---|---|
1 | 1 | 1 | hello |
##対応
先にコメントのマイグレーションファイルをロールバックする。
そうすればツイートのマイグレーションファイルがロールバックできる。