当前位置: 首页 > 知识库问答 >
问题:

销毁和删除的区别

夏宪
2023-03-14

两者的区别是什么

@model。销毁@模型。删除

例如:

Model.find_by(col: "foo").destroy_all
//and
Model.find_by(col: "foo").delete_all

我用这个或那个真的重要吗?

共有3个答案

漆雕升
2023-03-14

当您在ActiveRecord对象上调用destroydestroy\u all时,启动ActiveRecord的“销毁”过程,它分析要删除的类,确定它应该对依赖项做什么,运行验证等。

在对象上调用deletedelete\u all时,ActiveRecord仅尝试对db运行delete FROM tablename WHERE conditions查询,不执行其他ActiveRecord级别的任务。

方俊
2023-03-14

只删除db中的当前对象记录,而不删除db中关联的子记录。

destroy将从数据库中删除当前对象记录以及其关联的子记录。

它们的使用真的很重要:

如果您的多个父对象共享公共的子对象,那么在特定的父对象上调用销毁将删除在其他多个父对象之间共享的子对象。

南门魁
2023-03-14

基本上,destroy会对模型运行任何回调,而delete不会。

从Rails API:

>

  • ActiveRecord::Persistence.delete

    删除数据库中的记录,并冻结此实例,以反映不应该进行任何更改(因为它们不能持久化)。返回冻结的实例。

    用记录主键上的SQLDELETE语句简单地删除该行,并且不执行回调。

    要强制对象的before_destroy和after_destroy回调或任何:依赖关联选项,请使用#销毁。

    ActiveRecord::Persistence.destroy

    删除数据库中的记录,并冻结此实例,以反映不应该进行任何更改(因为它们不能持久化)。

    有一系列与破坏相关的回调。如果before_destroy回调返回false,则取消操作并销毁返回false。有关更多详细信息,请参阅ActiveRecord::Ca回滚。

  •  类似资料:
    • 我正在构建一个基于railsguide的rails应用程序 它在erb中调用的语法是... 控制器定义 与在application.html.erb中使用“application”相关联的错误

    • C++20引入了“destroying”(带有标记类型),是的新重载。 这到底是什么,什么时候有用?

    • 本文向大家介绍php清除和销毁session的方法分析,包括了php清除和销毁session的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php清除和销毁session的方法。分享给大家供大家参考。具体分析如下: 下面的代码分别用户删除单个session值和全部session unset() 用于释放一个已经存在的session值.可以使用 session_destroy()

    • 问题内容: 当前正在从事一个项目,在该项目中,当我们不从被破坏的示波器中清除广播订阅时,会发现大量内存泄漏。以下代码已解决此问题: 这种做法也应该用于手表吗? 下面的代码示例: 问题答案: 不,您不需要删除,因为一旦销毁范围,它们将被有效删除。 从角的源代码(v1.2.21),的方法: 因此,将清空该数组(并且将范围从范围层次结构中删除)。 无论如何,从阵列中删除都是注销功能所要做的: 因此,取消

    • 我有一个会话范围的CDI托管bean: 在某个流之后,我需要从会话中删除这个bean,对于该流,我使用了以下代码,如下面的答案所示: 但是,它不起作用,仍然留在会话中。 我是否遗漏了什么?

    • 销毁 Destroy 在不需要使用iScoll的时候调用iScroll实例的公共方法destroy()可以释放一些内存。 myScroll.destroy(); myScroll = null;