2016-01-22 68 views
1

我使用active_record-acts_as gem來實現多表繼承。我的情景:Rails多表繼承刪除子刪除父項

class Vehicle < ActiveRecord::Base 
    actable 
end 

class Plane < ActiveRecord::Base 
    acts_as :Vehicle 
end 

class Train < ActiveRecord::Base 
    acts_as :Vehicle 
end 

每當我創建飛機或火車的情況下,將創建一個相應的車輛,但是,每當我刪除一個平面上,相應的車輛行不會被刪除。

是否有可能這樣做,每當一個孩子被刪除,父行也被刪除?

+0

您可以嘗試使用活動記錄before_destroy/after_destroy回調 –

+0

您是否想要在回調方法中手動刪除它?我問是否有自動方式... – unknown

+0

看看[選項](https://github.com/hzamani/active_record-acts_as/blob/master/lib/active_record/acts_as/relation.rb# L10)。你應該使用依賴:: destroy –

回答

1

README documentation

acts_as支持所有has_one選項,其中默認值有:
as: :actable, dependent: :destroy, validate: false, autosave: true

所以:

class Vehicle < ActiveRecord::Base 
    actable 
end 

class Plane < ActiveRecord::Base 
    acts_as :Vehicle, dependent: :destroy 
end 

class Train < ActiveRecord::Base 
    acts_as :Vehicle, dependent: :destroy 
end 

我之前建議閱讀寶石的文檔/時使用它,特別是w母雞問題/問題出現在它的使用情況。

+0

我沒有閱讀過文檔,在詢問最初的問題之前試過了你的代碼,但沒有成功。以防萬一我在迴應之前再次嘗試,仍然無法正常工作。我刪除了一個平面,但在Vehicle上仍然存在一條記錄 – unknown

0

愚蠢的錯誤代表我從一開始。

記錄未被刪除的原因是因爲我在調用Plane.delete而不是Plane.destroy。

問候。