削除の際に外部キー制約が邪魔をして削除できない
解決したいこと
プログラミング学習を始めて1ヶ月の初学者です。
現在railsを使いオリジナルアプリを作成しています。
タスクを登録し、学習時間などを記録しツイートできる機能を作ろうとしています。
タスクを削除しようとするとエラーが発生し、削除が失敗してしまいます。
発生している問題・エラー
Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails (`futures_development`.`study_records`, CONSTRAINT `fk_rails_64ef43758c` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`))
https://gyazo.com/9ab42cfc70a7061a2a81cd28968e217f
該当するソースコード
def destroy
if @category.destroy
redirect_to controller: :tweets, action: :index
else
render template: 'tweets/index'
end
end
モデル間のアソシエーション
app/models/category.rb
class Category < ApplicationRecord
# アソシエーション
belongs_to :user
has_many :tweets
has_one :study_record, dependent: :destroy
# バリデーション
validates :task, presence: true
end
app/models/study_record.rb
class StudyRecord < ApplicationRecord
belongs_to :category
end
categoryテーブルのマイグレーションファイル
class CreateCategories < ActiveRecord::Migration[6.0]
def change
create_table :categories do |t|
t.string :task, null: false
t.references :user, null: false, forign_key: true
t.timestamps
end
end
end
study_recordのマイグレーションファイル
class CreateStudyRecords < ActiveRecord::Migration[6.0]
def change
create_table :study_records do |t|
t.float :hour_time, null: false
t.references :category, null: false, foreign_key: true
t.timestamps
end
end
end
自分で試したこと
dependent: :destroyをcategory.rbに追加してみたのですが変化無しでした💦
恐らくcategoryテーブルのtaskカラムを削除すると外部キーを受け取っているstudy_recordテーブルと辻褄が合わなくなってエラーが出ているのだと思うのですが、、、
かなり初歩的な質問かと思いますが、原因を教えて頂けると嬉しいです!
0