破坏和删除之间的区别
有什么区别
 @model.destroy和@model.delete 
例如:
 Model.find_by(col: "foo").destroy_all //and Model.find_by(col: "foo").delete_all 
如果我使用这个或那个,真的很重要吗?
 基本上destroy在模型上运行任何callback,而delete没有。 
从Rails API :
- 
ActiveRecord::Persistance.delete删除数据库中的logging并冻结此实例以反映不应该进行更改(因为它们不能被保留)。 返回冻结的实例。 该行只是通过logging的主键上的SQL DELETE语句来删除,并且不执行任何callback。 要强制执行对象的before_destroy和after_destroycallback或任何依赖关联选项,请使用#destroy。 
- 
ActiveRecord::Persistance.destroy删除数据库中的logging并冻结此实例以反映不应该进行更改(因为它们不能被保留)。 有一系列与摧毁有关的callback。 如果before_destroycallback返回false,则操作被取消,并且销毁返回false。 有关更多详细信息,请参阅ActiveRecord :: Callbacks。 
  delete将只从数据库删除当前的对象logging,但从数据库中删除其关联的子logging。 
  destroy将从数据库中删除当前的对象logging,也从数据库中删除其关联的子logging。 
他们的使用非常重要:
 如果多个父对象共享公共子对象,则调用特定父对象上的destroy将删除与其他多个父对象共享的子对象。 
 当你在一个ActiveRecord对象上调用destroy或者destroy_all的时候, ActiveRecord的销毁过程就会启动,它会分析你正在删除的类,它决定了它应该为依赖项做些什么,通过validation等等。 
 当你调用对象上的delete或delete_all时, ActiveRecord只会尝试运行DELETE FROM tablename WHERE conditions查询数据库,不执行其他ActiveRecord级别的任务。 
是的,这两种方法之间有一个主要的区别使用delete_all如果你想快速删除logging没有模型callback被调用
如果你关心你的模型callback,那么使用destroy_all
从官方文档
http://apidock.com/rails/ActiveRecord/Base/destroy_all/class
destroy_all(conditions = nil)public
通过实例化每条logging并调用其销毁方法销毁匹配条件的logging。 执行每个对象的callback(包括:依赖关联选项和before_destroy / after_destroy观察器方法)。 返回被销毁的对象的集合; 每个都将被冻结,以反映不应该做出改变(因为它们不能被坚持)。
注意:实例化,callback执行和每个logging的删除在一次删除多条logging时会非常耗时。 它为每个logging至less生成一个SQL DELETE查询(或者可能更多,以执行您的callback)。 如果您想快速删除多行,而不关心它们的关联或callback,请改用delete_all。
 基本上“删除”直接发送查询到数据库删除logging。 在这种情况下,Rails不知道它正在删除的logging中的属性是什么,也不知道是否有任何callback(如before_destroy )。 
“destroy”方法使用传递的id,使用“find”方法从数据库中提取模型,然后调用destroy方法。 这意味着callback被触发。
如果您不希望callback被触发或者您希望获得更好的性能,您可以使用“删除”。 否则(和大部分时间),你会想要使用“销毁”。