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 30 : 30天完赛总结 与 odoo15 新功能分享

>>:  参赛心得&感想

Day 2:挑选 Hexo 作为工程师技术部落格

来到铁人赛第二天,今天我们来聊聊 Hexo 这个架设工具。 Hexo 是什麽? Hexo 是利用 N...

System Design: 读书心得3

这篇的主题是因为有朋友提到 Database vs Data warehouse 的差别,所以就开始...

IOS、Python自学心得30天 Day-10 模组训练改善-2

前言: 储存上次进度训练模组後,目前遇到一个小问题,载入方面一直没试成功,所以我先做了一个辨别模型的...

[Day05] Flutter with GetX carousel slider 水平轮播

Carousel slider 轮播动画 原生要处理的话印象中是PageView 先建立一个widg...

[Day20] 登入、登出API – urls、测试阶段

哈罗~~ 夥伴们,昨天我们写完了登入、登出的views,所以今天我们要来设定登入、登出API的url...