小编典典

Destroy and Delete之间的区别

sql

之间有什么区别

@model.destroy 和 @model.delete

例如:

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

如果我使用一个或另一个真的有关系吗?


阅读 215

收藏
2021-04-16

共1个答案

小编典典

基本上destroy在模型上运行任何回调,而delete实际上不运行。

从Rails API中:

ActiveRecord::Persistence.delete

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

只需在记录的主键上使用SQL DELETE语句删除该行,就不会执行任何回调。

要强制执行对象的before_destroy和after_destroy回调或任何:dependent关联选项,请使用#destroy

ActiveRecord::Persistence.destroy

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

有一系列与destroy相关的回调。如果before_destroy回调返回false,则取消操作,destroy返回false。有关更多详细信息,请参见ActiveRecord :: Callbacks。

2021-04-16