`

ActiveRecord级联删除

 
阅读更多
ActiveRecord级联删除
Rails在关联关系中,han_one和has_many都有一个:dependent选项,告诉ActiveRecord在删除父记录时该如何处理子记录,它有五个属性(AWDWR):

    :dependent => :destroy(或true) --- 删除父记录的同时删除子表中的记录
    :dependent => :nullify  --- 删除父记录之后保留子记录,同时将子记录的外键值设置为null
    :dependent => :false(或nil) --- 删除父记录时不改变子记录。


但是在使用的过程中,设置为:destroy或:nullify,都没有达到效果,由于使用的是rails2.2.2,看了一下has_many的源码:
    
      # [:dependent]
# If set to <tt>:destroy</tt> all the associated objects are destroyed
# alongside this object by calling their +destroy+ method.  If set to <tt>:delete_all</tt> all associated
# objects are deleted *without* calling their +destroy+ method.  If set to <tt>:nullify</tt> all associated
# objects' foreign keys are set to +NULL+ *without* calling their +save+ callbacks. *Warning:* This option is ignored when also using
      #   the <tt>:through</tt> option.

发现选项已经变成了:

    :destroy
    :delete_all
    :nullify

但发现也没有达到要求。

最后发现controller代码中调用的是ActiveRecord的delete方法,换成destroy方法后,发现能够正常地级联删除子记录。
对于ActiveRecord,delete方法不能级联删除子记录,而要使用destroy方法 。
分享到:
评论

相关推荐

    ActiveRecord简单实例_activerecord.zip

    删除记录: ```ruby user.destroy ``` ActiveRecord还支持关联,如一对一(has_one),一对多(has_many),多对一(belongs_to)和多对多(has_and_belongs_to_many)关系。例如,如果`users`表和`posts`表有关系...

    NHibernate中文教程+activerecord

    级联操作可以控制一个对象的更改如何影响其关联对象,如删除一个父对象时,是否同时删除所有子对象。 6. **缓存** NHibernate支持二级缓存,通过缓存策略可以提升性能,减少对数据库的访问。常见的缓存提供商有...

    Castle ActiveRecord快速入门指南、ActiveRecord帮助文档

    - `Delete()`:删除数据库中的记录。 - `Find()`/`Load()`:根据主键或其他条件查询对象。 - `All()`:获取表中的所有记录。 - `First()`/`FirstOrDefault()`:获取第一条满足条件的记录。 - **查询语言**:...

    Pro ActiveRecord Databases with Ruby and Rails.pdf

    ### ActiveRecord在Ruby与Rails中的高级应用 #### 一、引言 《Pro ActiveRecord Databases with Ruby and Rails》这本书深入探讨了如何使用ActiveRecord框架来高效地处理Ruby on Rails中的数据库操作。本书由Kevin ...

    ar-softdelete, ActiveRecord的软删除行为.zip

    ar-softdelete, ActiveRecord的软删除行为 用于Yii2的ActiveRecord软删除扩展这里扩展为ActiveRecord软删除提供支持。许可证信息检查许可证 -file"。 安装安装这个扩展的首选方法是通过 composer插件。运行php

    castle ActiveRecord 源代码

    2. **对象生命周期管理**:Castle ActiveRecord提供了对对象生命周期的控制,如自动持久化、懒加载、级联操作等。这使得开发者可以在不关心具体数据库操作的情况下,实现对象的创建、更新和删除。 3. **事务管理**...

    简单Castle.ActiveRecord.Generator

    在"简单Castle.ActiveRecord.Generator"例子中,我们看到了如何实现基本的CRUD(创建、读取、更新、删除)操作。这些操作是任何数据库驱动应用程序的核心部分。生成的代码可能包含了以下部分: 1. **模型类**:这些...

    Castle.ActiveRecord (.NET FrameWork 2.0)

    Castle.ActiveRecord For .NET FrameWork 2.0 如果你想使用Castle.ActiveRecord,但又不想使用.NET Framework 3.0/3.5/4.0或更高版本,那么这个就是你所需要的,For .NET FrameWork 2.0,我整理了好久,自己从官方...

    C# Castle.ActiveRecord CS源码示例教程.zip

    在 Winform 应用中,你可以利用 Castle.ActiveRecord 提供的 CRUD(创建、读取、更新、删除)操作方法,轻松地与数据库进行交互。例如: ```csharp using (var session = ActiveRecordMediator&lt;User&gt;....

    Castle.ActiveRecord 升级NHibernate到3.4.0GA

    Castle.ActiveRecord官方已经停止更新了,官方最高支持到NHibernate 3.1.0.4000,这个版本还有不少问题(例如:[NH-2213] - CLONE -Wrong parameters order in IQuery with SetParameterList and Filter)。...

    scala-activerecord-specs_2.9.2-0.2.3.zip

    描述中提到"scala-activerecord.zip",这可能是Scala Activerecord的主要库文件,而"scala activerecord scalatraactiverecord"则暗示Scala Activerecord可能与ScalatraActiverecord有关,ScalatraActiverecord是一...

    MyBatisPlus的ActiveRecord实现CRUD示例代码

    在本示例中,我们将深入探讨MyBatisPlus如何通过ActiveRecord模式实现CRUD(创建、读取、更新、删除)操作。ActiveRecord是一种设计模式,它将数据库表中的每一条记录映射为一个对象,通过这个对象可以直接进行CRUD...

    ActiveRecord 升级NHibernate到3.3.0GA

    将ActiveRecord中的NHibernate升级到3.3.0GA,排除编译的bug问题,保留ActiveRecord的完整功能,【Castle.ActiveRecord 升级NHibernate到3.4.0GA】的功能不完整!

    [IronRuby] C# 4.0调用ActiveRecord

    从提供的文件信息中,我们可以得知这篇博文主要讨论的是如何使用C# 4.0调用IronRuby中的ActiveRecord功能。不过由于博文链接和部分详细内容无法提供,知识点将基于文件信息部分和公共知识构建。 知识点一:IronRuby...

    C# Castle.ActiveRecord Winform 源码示例教程

    Castle.ActiveRecord 的资料很多,但是WINFORM的没几个,于此我专门写了个例子献给初学Castle.ActiveRecord的童鞋们,希望这篇文档能够帮到你们。这个例子使用的是ACCESS数据库,从单表,一对多,多对多,数据绑定,...

    Java敏捷持久层-ROR-ActiveRecord持久层框架的Java实现

    2. 简单的CRUD操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据库记录变得非常直观,只需要调用对应的类方法即可。 3. 关联映射:支持一对多、一对一、多对多等复杂的数据库关联关系,通过...

    userstamp, 这个 Rails 插件扩展ActiveRecord.zip

    userstamp, 这个 Rails 插件扩展ActiveRecord Userstamp插件( v-2.0 )概述Userstamp插件扩展了 ActiveRecord::Base,以添加对'创建者','更新程序'和'deleter'属性的自动更新。 它是基于 ActiveRecord::Timesta

    Castle ActiveRecord 2.0

    - **级联操作**:如 `Cascade.All()` 可以自动处理关联对象的保存和删除。 - **懒加载**:使用 `LazyLoad` 特性,可以在需要时才加载关联对象,提高性能。 **3. 事务管理** Castle ActiveRecord 支持 AOP(面向切面...

    Caste ActiveRecord

    然后,可以利用Caste ActiveRecord 提供的方法进行CRUD(创建、读取、更新、删除)操作。例如: ```csharp using (var session = ActiveRecordSession.Create()) { // 创建 var user = new User { Username = ...

    ActiveRecord最终版(已更新NHibernate.3.4.1.4000)

    ActiveRecord最终版,由于ActiveRecord引用了ISet集合,Iesi.Collections.3.4.1.4000以后已经把ISet去掉了,所以ActiveRecord引用的NHibernate的版本的更新只能到3.4.1.4000此为止。 引用其他资源版本如下: ...

Global site tag (gtag.js) - Google Analytics