Pergunta

Eu tenho uma seqüência de ActiveRecord objetos que eu quero cascata destruir, mas alguns dos objetos não estão sendo removidos.

Essencialmente eu tenho a seguinte: -

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

onde Projeto é uma definição de um projeto, a tarefa A definição de uma tarefa nesse projeto e agendar um has_many:. Através de que as ligações de um projeto original para outro projeto, que é um cronograma do projeto original

Quando eu criar uma agenda, Eu sou profundamente-clonagem do projeto original (ou seja, a programação é um clone do projeto original e cada uma das tarefas no calendário são clones das tarefas no cronograma original).

Quando eu faço um schedule.destroy eu esperaria que o projeto cronograma e toda a tarefas associadas a ser eliminado. No entanto, apenas o projeto cronograma for excluído, as tarefas de agendamento permanecem.

Este não é um problema de cache como os registros ainda estão no banco de dados. Além disso, existem tarefas definitivamente separados sendo criados no banco de dados com ID de programação como o ID de projeto e id aunique própria.

Do ainda callbacks fogo em objetos clonados? Eu perdi um truque aqui?

Foi útil?

Solução

A partir do olhar de seus descrições de classe, eu não esperar uma eliminação em cascata quando você destruir um objeto de agendamento. Se você excluir um objeto de projeto, então Rails devem passar por tarefas criança e Programações (realmente não sei o cronograma do projeto é aqui) e excluir os registros por causa da opção :dependent => :destroy. Tarefas e horários são filhos de projeto e não causaria um pai para ser apagada.

Se você quiser remover o projeto pai quando um planejamento é excluído eu provavelmente iria olhar para escrever um callback after_delete.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top