delete()方法接收一个或一组和数据库对应的id,但不会删除管理表的记录
User.delete([2,3,4,5])
Order.delete(123)
delete_all()方法删除所有符合指定条件的记录,如果没有指定条件,就会删除所有的记录,会返回删除数,但不会删除管理表的记录
Product.delete_all(["price > ?", @expensive_price])
destory()方法接收一个或一组id,会删除管理表记录
User.destory([2,3,4,5])
Order.destory(123)
destory_all()方法接收删除条件,并且对这个对象调用实例级别的destory()方法,而且不返回有意义的信息,会删除管理表记录
Order.destroy_all(["shipped_at < ?", 30.days.ago])
为什么我们同时需要delete和destory方法呢?delete方法绕过了一些Active Record的回调(callback)和验证函数,而使用destory则不会,通常我们使用destory方法来确保我们的数据库是一致的,并且不会破坏Model中所包含的业务逻辑。
网友评论