2009-04-13 2 views
0

나는 일련의 ActiveRecord 객체를 파괴하려고하지만 일부 객체는 제거되지 않습니다.복제가 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를 할 때 일정 프로젝트와 모든 관련 작업이 삭제 될 것으로 예상됩니다. 그러나 일정 프로젝트 만 삭제되고 일정 작업은 그대로 유지됩니다.

레코드가 여전히 데이터베이스에 있으므로 캐싱 문제가 아닙니다. 또한 프로젝트 ID와 고유 한 ID로 일정 ID가있는 데이터베이스에서 생성되는 작업은 분명히 구분됩니다.

복제 된 개체에 여전히 콜백이 실행됩니까? 내가 속임수를 놓친 적이 있니?

답변

1

클래스 설명의 모양에서 일정 개체를 삭제할 때 계단식 삭제가 필요하지 않습니다. 프로젝트 개체를 삭제하면 Rails는 하위 작업 및 일정 (실제로 어떤 프로젝트 일정이 있는지 확실하지 않음)을 통과하고 :dependent => :destroy 옵션으로 인해 레코드를 삭제해야합니다. 작업 및 일정은 Project의 하위 항목이며 상위 항목을 삭제하지 않습니다.

일정을 삭제할 때 상위 프로젝트를 제거하려면 after_delete 콜백을 작성하는 것이 좋습니다.

+0

감사합니다, 마이클. 네가 맞아, 나는 이것을 잘못된 방향으로 돌리고 있었다. after_delete 콜백을 사용하여 살펴 보겠습니다. 많은 감사합니다. –

관련 문제