delete_all vs destroy_all

delete (删除某一个或多个以id为条件的记录)
Article.delete(4) (会返回影响记录条数,如1)
Article.delete([5, 6]) (会返回影响记录条数,如0)

delete_all (删除带条件的记录)
Article.delete_all(“published_at < ‘2011-01-01’”) (也会返回影响记录条数)

destroy (没有返回值)
Article.destroy(1)
Article.destroy([2,3])

a = Article.first
a.destroy 实例级别方法

Article.destory_all("published_at < '2011-01-01'") (删除带条件的记录)

类级别方法

Rails 会调用每个子对象的 destroy 方法,再调用父对象的 destroy 方法。会触发 model 中定义的回调(before_remove, after_remove , before_destroy 和 after_destroy)
delete方法绕过了一些Active Record的回调(callback)和验证函数,而使用destory则不会,通常我们使用destory方法来确保我们的数据库是一致的,并且不会破坏Model中所包含的业务逻辑。

在被移除之前,“dependent destroy” 会选择所有受限记录,建立其对象,并调用各自的毁灭方法。此方法允许你移除所有受限数据。但是,当涉及大量数据时,这种方法就不管用了。
至于 “dependent delete_all”,它会通过一条 SQL 查询移除自己。它效率很高,但是,在这种情况下,你得自己考虑数据库的完整性。