The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    Active Record提供了两种方式进行删除操作。首先,有两个类级别的方法,deletedelete_all,这两个操作处在数据库层面上,delete()方法接收一个或一组和数据库对应的iddelete_all()方法删除所有符合指定条件的记录,如果没有指定条件,就会删除所有的记录。方法的返回值和具体的数据库适配器相关,例如oracle返回被影响的行数。如果没有记录被删除,也不会抛出异常。

Order.delete(123)

User.delete([2,3,4,5])

Product.delete_all(["price > ?", @expensive_price])

另外,destory方法删除和数据库中行相对应的Model对象,这样会冻结这些对象,并且不能修改对象的值。

order = Order.find_by_name("Dave")

order.destroy

有两个类级别的destory方法,destory()方法接收一个或一组iddestory_all()方法接收删除条件。这两个方法都从数据库中读出对应的记录到Model对象,并且对这个对象调用实例级别的destory()方法,而且不返回有意义的信息。

Order.destroy_all(["shipped_at < ?", 30.days.ago])

为什么我们同时需要deletedestory方法呢?delete方法绕过了一些Active Record的回调(callback)和验证函数,而使用destory则不会,通常我们使用destory方法来确保我们的数据库是一致的,并且不会破坏Model中所包含的业务逻辑。