У меня есть последовательность объектов 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 has_many: посредством этого связывает исходный проект с другим проектом, который является расписанием исходного проекта.
Когда я создаю расписание, я выполняю глубокое клонирование исходного проекта (т. Е. Расписание является клоном исходного проекта, а каждая из задач в расписании является клоном задач в исходном расписании).
Когда я делаю schedule.destroy, я ожидал, что проект расписания и все связанные с ним задачи будут удалены. Однако удаляется только проект расписания, задачи расписания остаются.
Это не проблема кэширования, поскольку записи все еще находятся в базе данных. Кроме того, в базе данных определенно создаются отдельные задачи с идентификатором расписания в качестве идентификатора проекта и собственного уникального идентификатора.
Обратные вызовы все еще работают на клонированных объектах? Я пропустил здесь трюк?