我有一系列想要级联销毁的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项目和它的所有相关任务都会被删除。但是,只有计划项目被删除,计划任务仍保留。
这不是缓存问题,因为记录仍在数据库中。此外,在数据库中肯定有单独的任务正在创建,其中schedule id作为项目id,以及它们自己的唯一id。
回调是否仍会在克隆对象上触发?我是不是错过了一个小把戏?
发布于 2009-04-13 12:00:13
从您的类描述来看,当您销毁一个调度对象时,我不希望看到级联删除。如果您删除一个项目对象,那么Rails应该通过子任务和时间表(不是很确定项目时间表在这里),并删除记录,因为:dependent => :destroy选项。任务和计划是Project的子项,不会导致删除父项。
如果您想在删除计划时删除父项目,我可能会考虑编写一个after_delete回调。
https://stackoverflow.com/questions/743439
复制相似问题