2012-08-27 86 views
2

我有兩個模型之間有一個簡單的has_many/belongs_to關聯。 我的問題是,當我刪除一個我不再想要的對象(來自父模型)時,子模型對象中的外鍵仍然存在。例如:刪除模型對象後如何刪除關聯

森林

has_many :trees, :inverse_of => :forest

belongs_to :forest

當我刪除Forest對象,所有相關的Tree對象還含有價值forest_id,結果在前端發生錯誤。有沒有像我可以使用的before_destroy之類的鉤子?雖然我在想這可能是一個非常簡單的解決方案。

感謝

回答

4

我認爲,你想要的:dependent選項。

has_many :trees, :inverse_of => :forest, :dependent => :nullify 

這會在關聯模型被銷燬時將外鍵設置爲nil。您也可以使用:dependent => :destroy銷燬該模型。

The documentation here可能會有所幫助。

+0

這正是我一直在尋找的東西,不幸的是它不起作用?外鍵仍然 –

+0

你可以嘗試使用':dependent =>:restrict',如果rails認爲外鍵存在,它將會引發異常......只是爲了驗證依賴選項是否被設置。 – cjhveal

+0

Ahhh它的工作原理 - 我的不好,我把':dependent'選項放在錯誤的模型上。謝謝:) –

0

你必須添加:與聯想相關的選項像

的has_many:樹木:依賴=>:摧毀

它會刪除特定森林對象的所有樹木。

+0

我寧願孤兒樹而不是摧毀它們。拯救樹木! ;) –

相關問題