2009-04-13 79 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時,我會期待schedule項目及其所有相關任務被刪除。但是,只有計劃項目被刪除,計劃任務依然存在。

這不是緩存問題,因爲記錄仍在數據庫中。此外,在數據庫中確實有獨立的任務,其中包含作爲項目標識和他們自己的唯一標識的日程標識。

回調仍然會觸發克隆對象嗎?我在這裏錯過了一個詭計嗎?

回答

1

從你的類描述的外觀來看,當你銷燬一個Schedule對象時,我不希望有級聯刪除。如果您刪除了一個Project對象,那麼Rails應該通過子任務和時間表(不確定項目時間表在這裏)並刪除記錄,因爲:dependent => :destroy選項。任務和時間表是項目的子項,不會導致父項被刪除。

如果您想在刪除時間表時刪除父項目,我可能會考慮編寫一個after_delete回調。

+0

謝謝,邁克爾。你說得對,我錯了。我會看看使用after_delete回調。非常感謝。 – 2009-04-13 12:34:36