0

我有一系列想要级联销毁的 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 是项目的定义, Task 是该项目上的任务的定义, Schedule a has_many :through 将原始项目链接到另一个项目,这是原始项目的计划。

当我创建一个日程表时,我正在对原始项目进行深度克隆(即日程表是原始项目的克隆,日程表上的每个任务都是原始日程表上的任务的克隆)。

当我执行 schedule.destroy 时,我希望计划项目及其所有相关任务都被删除。但是,仅删除了计划项目,保留了计划任务。

这不是缓存问题,因为记录仍在数据库中。此外,在数据库中肯定有单独的任务被创建,日程 ID 作为项目 ID,它们自己的唯一 ID。

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

4

1 回答 1

1

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

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

于 2009-04-13T12:00:12.823 回答