1. yamato1491038

    Posted

    yamato1491038
Changes in title
+[Rails]外部キー制限かかっているときにdestoryできないエラーを発生させたい時の対処
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,38 @@
+#はじめに
+レコード削除時に関連づけられたレコードが存在するときに、例外やエラーを発生させたい。
+外部キーで使用されていると親要素が消されては困るというシチュエーションです。
+
+削除しようとするとRubyのエラー画面が出てしまう。
+#原因
+`Model`に関係づけされたモデルに対する挙動を定義するが無いからでした。
+マイグレーションファイルの`foreign key: True`だけでは不十分でした。
+
+#対策
+`Model`に`dependentオプション`を記述することで解決しました。
+該当のモデルに以下の記述をします。
+
+```ruby
+
+class Contract < ApplicationRecord
+ has_many :...., dependent: :restrict_with_error
+
+end
+```
+アソシエーション記述の後に`dependent: :restrict_with_error`と記述することで`destory`できないときのエラーを表示することができた。
+以下の条件分が成り立ち解決しました!。
+
+```ruby
+
+#contractというモデル
+def destroy
+ contract = Contract.find(params[:id])
+ if contract.destroy
+ redirect_to contract_path, notice: "選んだ契約を削除しました"
+ else
+ redirect_to contract_path, alert: "使用中のため削除できません"
+ end
+end
+```
+
+#参照
+・https://dorarep.page/articles/rails-dependent#dependent_restrict_with_exception_restrict_with_error