克隆会影响activerecord回调吗?

时间:2009-04-13 09:28:25

标签: ruby-on-rails activerecord associations callback

我有一系列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

其中Project是项目的定义,在该项目上任务定义任务,并安排a_many:通过将原始项目链接到另一个项目,这是原始项目的计划。

当我创建计划时,我正在深入克隆原始项目(即计划是原始项目的克隆,并且计划中的每个任务都是原始计划中任务的克隆)。

当我执行schedule.destroy时,我希望删除计划项目及其所有相关任务。但是,仅删除计划项目,计划任务仍然存在。

这不是缓存问题,因为记录仍在数据库中。此外,数据库中确实创建了单独的任务,其中schedule id作为项目ID和他们自己的唯一ID。

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

1 个答案:

答案 0 :(得分:1)

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

如果要在删除计划时删除父项目,我可能会考虑编写after_delete回调。