iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
Modern Web

網頁前後端寶石庫-礦坑補完計畫系列 第 30

Day 30 Rails dependent destroy

在 Day 03 的時候有提到筆者在跟同組的同學做一個專案。
筆者的專案是做一個筆記網站,筆記內可以留言、新增標籤、按讚、收藏等。
在做到一半的時候遇到一個問題,就是當我在文章內留言、按讚或收藏之後沒辦法刪除筆記,會出現以下的錯誤訊息。
https://ithelp.ithome.com.tw/upload/images/20211014/20139241ap31ooc5vA.png
後來研究了一下才知道因為這些功能都跟我的筆記有關聯性,在 note model 內還要再加一個刪除的關聯才能夠正常刪除筆記,也就是** dependent: :destroy**。

而 dependent 其實不只有 destroy 可以加,總有以下六種方法:

  • :destroy:同時刪除關聯物件。(可正常刪除)
  • :delete_all:直接將關聯物件從資料庫刪除,不會執行回呼。(可正常刪除)
  • :destroy_async: 當物件被刪除時,ActiveRecord::DestroyAssociationAsyncJob 任務會去排列在有關聯性的物件後面,Active Job 需要被設置才能夠正常運作。(會出現錯誤訊息)
    https://ithelp.ithome.com.tw/upload/images/20211014/20139241iiufNFzysW.png
  • :nullify:把外鍵設為 NULL,不會執行回呼。(會出現錯誤訊息)
    https://ithelp.ithome.com.tw/upload/images/20211014/20139241fcVCtyTSu7.png
  • :restrict_with_exception:有關聯物件的話,向擁有者拋出異常。(會出現錯誤訊息)
    https://ithelp.ithome.com.tw/upload/images/20211014/20139241zPJfAEXrky.png
  • :restrict_with_error:有關聯物件的話,向擁有者拋出錯誤。(不會噴錯但刪不掉)

參考:
[1]Active Record 關聯
[2]Active Record Associations

完賽感言

30天鐵人賽順利完賽啦!
我們明年再見~~


上一篇
Day 29 Rails soft delete - paranoia
系列文
網頁前後端寶石庫-礦坑補完計畫30

2 則留言

1
王天君
iT邦新手 5 級 ‧ 2021-10-16 17:47:21

恭喜修哥完賽!
話說明年還要再一次@@?!
/images/emoticon/emoticon06.gif
一起加油~

阿修 iT邦新手 5 級 ‧ 2021-10-16 19:33:40 檢舉

對阿 還有很多沒寫的XD
繼續加油吧!

1

恭喜同學修哥完成三十天!!!/images/emoticon/emoticon64.gif

阿修 iT邦新手 5 級 ‧ 2021-10-16 21:24:55 檢舉

讚啦~
/images/emoticon/emoticon01.gif

我要留言

立即登入留言