我有一種情況,我想在另一個對象被銷燬後更新父對象的依賴關係。下面是類層次結構的一個例子:after_destroy孩子的回調保存父母的依賴關係,當父母被銷燬時導致問題
class Parent < ActiveRecord::Base
has_one :info, :dependent => :destroy
has_many :conditions, :dependent => :destroy
....
end
class Info < ActiveRecord::Base
belongs_to :parent
def recalculate
# Do stuff
end
....
end
class Condition < ActiveRecord::Base
belongs_to :parent
has_one :condition_detail
after_destroy :update_info
def update_info
parent.info.recalculate
parent.info.save(:validate => false)
end
....
end
的問題是,當父被破壞,它破壞的情況,然後襯托after_destroy回調並保存信息對象之後,它已經被摧毀。所以父母被摧毀後,信息依然存在。如果我不繞過驗證,保存會默默地失敗,這是我不想要的。並使用保存!引發了一個例外。
Condition上的回調函數必須是after_destroy,否則Info上的重新計算方法將無法正確表示關係的狀態以計算需要的值。
我覺得我需要一種方式來繞過回調,當父母被摧毀,但我不認爲這是可能的。我不能使用dependent => delete_all,因爲這不會破壞Condition的子項。我試着看看是否有一種方法可以告訴父母是否有銷燬請求,並使用該信息繞過after_destroy中的保存,但這似乎也不起作用。
任何幫助將不勝感激,謝謝!