两者有什么区别?
@model.destroy
和@model.delete
例如:
Model.find_by(col: "foo").destroy_all
//and
Model.find_by(col: "foo").delete_all
我用这个还是那个真的有关系吗?
发布于 2014-03-31 09:03:05
基本上,destroy
在模型上运行任何回调,而delete
不运行。
来自Rails API
ActiveRecord::Persistence.delete
删除数据库中的记录并冻结此实例,以反映不应进行任何更改(因为它们不能持久保存)。返回冻结的实例。
只需在记录的主键上使用SQL语句删除该行,就不会执行回调。
若要强制执行对象的before_destroy和after_destroy回调或任何:依赖关联选项,请使用#析构。ActiveRecord::Persistence.destroy
删除数据库中的记录并冻结此实例,以反映不应进行任何更改(因为它们不能持久保存)。
有一系列与破坏相关的回调。如果before_destroy回调返回false,则此操作将被取消,而destroy返回false。有关详细信息,请参阅ActiveRecord::回调。发布于 2014-03-31 09:09:21
delete
只会从db中删除当前对象记录,而不会从db删除与其关联的子记录。
destroy
将从db中删除当前对象记录,并从db中删除与其关联的子记录。
他们的使用真的很重要:
如果多个父对象共享公共子对象,则对特定父对象调用destroy
将删除其他多个父对象之间共享的子对象。
发布于 2014-03-31 09:02:51
当您对一个destroy
对象或destroy_all
对象调用ActiveRecord
或destroy_all
时,会启动ActiveRecord
的“销毁”过程,它将分析要删除的类,确定它对依赖项应该做什么,通过验证运行等等。
当对对象调用delete
或delete_all
时,ActiveRecord
只是尝试对db运行DELETE FROM tablename WHERE conditions
查询,而不执行其他ActiveRecord
-level任务。
https://stackoverflow.com/questions/22757450
复制相似问题