在rails中,如何确定记录是否被依赖的: :destroy 回调销毁?

2023-12-29

我的 Rails 应用程序中有一条记录after_destroy需要知道记录被破坏的原因的钩子。更具体地说,如果该记录由于其父记录而被级联销毁dependent: :destroy,它需要采取与单独销毁记录不同的方式。

我想做的是看看它的父母是否是destroyed?,只是为了弄清楚dependent: :destroy回调在父级被销毁之前完成。这是有道理的,因为它应该能够失败。 (即限制)。

那么,我该怎么做呢?


解决方案#1

如果您的模型足够简单并且不需要在子关系中调用任何回调,则可以使用dependent: delete_all在父级中。

解决方案#2

对于更复杂的场景,您可以使用destroyed_by_association,它返回一个ActiveRecord::Reflection::HasManyReflection当它是级联的一部分时为 object,否则为 nil:

after_destroy :your_callback

def your_callback
  if destroyed_by_association
    # this is part of a cascade
  else
    # isolated deletion
  end
end

我刚刚在 Rails 4.2 中尝试过,它有效。

Source: https://github.com/rails/rails/issues/12828#issuecomment-28142658 https://github.com/rails/rails/issues/12828#issuecomment-28142658

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在rails中,如何确定记录是否被依赖的: :destroy 回调销毁? 的相关文章

随机推荐

  • 在状态管理器中对视图状态进行动画处理

    我有一个具有 2 个视图状态的状态管理器实现 我想推迟状态的正常删除 并在视图被销毁并且状态管理器转换到另一个状态时添加自定义动画 这是一个 jsFiddle http jsfiddle net Xkg6X http jsfiddle ne
  • 从跨域加载 vtt 的问题

    我在从跨域加载 vtt 时遇到问题 加载 URL 域的尝试不安全 协议和端口必须匹配 我尝试将 crossorigin true 添加到视频中 它在 Chrome 和 Firefox 中工作 但在 Internet Explorer 11
  • jQuery UI 的 Draggable 和页面滚动

    我注意到 当我使用 jQuery UI 的可拖动功能时 我必须在页面上向上 向下拖动元素 以强制滚动 被拖动的元素的跳跃速度似乎是鼠标光标的两倍 这会导致非常不稳定的行为 并且几乎无法使用 我的意思的一个例子可以在这里找到 http tin
  • 选择名称与 PostgreSQL 中的正则表达式匹配的列

    我怎样才能只选择那些columns谁的名字与 PostgreSQL 中的正则表达式匹配 例如 如何仅选择下表中名称以 A 开头的列 而不在选择列表中显式枚举它们 id A1 A2 A3 A4 A5 B 1 a b c d e f 2 g h
  • RethinkDB 用于过滤器 + orderby 的索引

    让我们说一个comments表具有以下结构 id author timestamp body 我想使用索引来有效地执行以下查询 r table comments getAll me index author orderBy timestam
  • 如何保持元素不刷新

    主要目标是保持徽标文本不刷新 div class small 7 medium 4 columns logo 和菜单 div
  • laravel - 刀片模板布局结构为每 4 个跨度添加行流体

    我有这个刀片模板 div class row fluid foreach courses as course div class span3 learn Content div endforeach Output div class row
  • 使用 SheetJS 设置日期格式

    预先感谢您百忙之中看一下这个问题 我正在尝试使用 SheetJS 读取 xlsx 文件 但在处理通过 Excel 格式化为自定义 yyyy mm dd hh mm ss 的日期列时遇到一些问题 所有这些日期都显示为大浮点值 以下是在上传时读
  • 从已发布的 Google 文档电子表格中删除页眉和页脚 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我找到了用于删除 Google 文档电子表格上的网格线的 JavaScript 解决方案 使用 下载为 HTML 然后在网址栏中使用 Ja
  • 如何获取具有不同命名空间的元素

    我希望获取下面 xml 的元素名称 我的请求中的问题是我想获取有效负载元素 为此我使用了这个表达 name env Payload 所以我得到这个结果环境 有效负载
  • PyInstaller 隐藏导入

    我有一个完全运行的 Python 程序 它使用以下导入 import json import requests from natsort import natsorted 但是 当我尝试使用 PyInstaller 将其编译为可执行文件时
  • 有没有办法在 Travis CI 中访问和查看 html 报告以进行 Maven 测试?

    有没有办法在 Travis CI 中访问和查看 html 报告以进行 Maven testng 测试 目前 Travis CI 日志是我查看通过 失败 跳过的测试数量等的唯一方法 像这样的事情 测试运行 34 失败 0 错误 0 跳过 0
  • QMake:使用相对路径引用库

    我有一个使用 SQLite 的 Qt 项目 所以我有以下目录结构 C Workspace MyProject MyProject pro C Workspace MyProject sqlite3 sqlite3 lib 添加带有绝对路径的
  • 隐藏 asp.net WebMethod 返回的异常的堆栈跟踪?

    我在我的 aspx 页面中使用带有属性 WebMethod 的方法 我不使用任何 asp net ajax 而是使用 jQuery 来调用这些方法并返回 JSON 中的对象 这一切都很好 接下来 我在 webMethod 内添加了授权检查
  • 随机大小的网格的纹理重复

    我需要一些关于 Three js 中纹理的帮助 我有多个块 每个块都有随机的宽度 高度 我需要对它们应用相同的纹理 但沿整个块重复 正如我从另一个答案中看到的 我可以使用以下代码设置纹理重复 lavaTexture wrapS lavaTe
  • 表单提交后标题位置未重定向

    您好 我的表单在提交后没有重定向到我的成功页面 该消息确实通过了 我确实收到了测试电子邮件 但是 我的表单在发送电子邮件后不会重定向 我正在使用标头位置来重定向 谁能帮我这个 require once class phpmailer php
  • 何时使用存储过程而不是使用任何带有编程逻辑的 ORM?

    大家好 我想知道什么时候我应该更喜欢编写存储过程而不是编写编程逻辑和使用 ORM 或其他东西提取数据 存储过程在服务器端执行 这意味着处理大量数据不需要通过网络连接传递这些数据 此外 通过存储过程 您可以构建一致的复杂业务逻辑 比如说 您每
  • 以编程方式发布表单并没有执行我的浏览器正在执行的操作。为什么?

    我正在尝试以编程方式在不属于我的网站上提交表单 我正在尝试模拟使用网络浏览器手动执行的操作 我正在使用 HTTP 库发出 HTTP POST 请求 由于我不知道 当我以编程方式提交表单时 与在网络浏览器中手动提交相比 我得到了不同的结果 错
  • 将 COMP-3 压缩十进制字段解释为数值

    我正在创建一个 SSIS 包来从一系列抄写本文件中读取解压数据 我不确定以下字段定义的正确解释 希望有人知道 FIELD NAME 1 PIC S9 15 V9 3 COMP 3 FIELD NAME 2 PIC S9 3 V9 8 COM
  • 在rails中,如何确定记录是否被依赖的: :destroy 回调销毁?

    我的 Rails 应用程序中有一条记录after destroy需要知道记录被破坏的原因的钩子 更具体地说 如果该记录由于其父记录而被级联销毁dependent destroy 它需要采取与单独销毁记录不同的方式 我想做的是看看它的父母是否