2009-04-13 36 views
0

我有一系列我想级联销毁的ActiveRecord对象,但是一些对象没有被删除。克隆是否会影响activerecord回调?

基本上我有如下: -

class Project < ActiveRecord::Base 

    has_many :tasks, :dependent => :destroy 
    has_many :schedules, :dependent => :destroy 
    has_many :project_schedules, :through => :schedules, :class_name => "Project", :dependent => :destroy 

end 

class Schedule < ActiveRecord::Base 

    belongs_to :project_schedule, :class_name => "Project" 
    belongs_to :project 

end 

class Task < ActiveRecord::Base 

    belongs_to :project 

end 

,其中项目是一个项目的定义,任务对项目任务的定义,并排定的has_many:通过原来的项目链接到另一个项目,这是原始项目的时间表。

当我创建一个时间表时,我深入克隆了原始项目(即时间表是原始项目的克隆,并且时间表上的每个任务都是原始时间表上任务的克隆)。

当我做一个schedule.destroy时,我会期待schedule项目及其所有相关任务被删除。但是,只有计划项目被删除,计划任务依然存在。

这不是缓存问题,因为记录仍在数据库中。此外,在数据库中确实有独立的任务,其中包含作为项目标识和他们自己的唯一标识的日程标识。

回调仍然会触发克隆对象吗?我在这里错过了一个诡计吗?

回答

1

从你的类描述的外观来看,当你销毁一个Schedule对象时,我不希望有级联删除。如果您删除了一个Project对象,那么Rails应该通过子任务和时间表(不确定项目时间表在这里)并删除记录,因为:dependent => :destroy选项。任务和时间表是项目的子项,不会导致父项被删除。

如果您想在删除时间表时删除父项目,我可能会考虑编写一个after_delete回调。

+0

谢谢,迈克尔。你说得对,我错了。我会看看使用after_delete回调。非常感谢。 – 2009-04-13 12:34:36