2012-06-26 30 views
2

據我所知,update_only不適用於has_many關聯。has_many + accepts_nested_attributes_for +:update_only => true

我正在更新嵌套的屬性,它每次都會創建新的子項並且不會刪除舊的子項。什麼是在每次更新時自動刪除它們的好方法(模仿:適用於has_one的update_only行爲)?

我知道about:allow_destroy。但是,我沒有孩子ID讓軌道知道應該銷燬什麼。

P.S.我最初在2012年問過這個問題,當時我發現了一個hacky解決方案來覆蓋assign_nested_attributes_for_collection_association。我想知道Rails中是否引入了任何解決此問題的方法。它看起來非常普遍的直接案例。我想知道爲什麼有一個內置的解決方案。

回答

1

我發現的最佳方法是覆蓋對象的方法assign_nested_attributes_for_collection_association,檢查那裏的關聯類型。如果它是has_many,那麼在這個關聯上做destroy_all。

這樣的代碼可以通用化並移動到模塊以供進一步重用。

+0

BTW。這個解決方案在Rails 4中變得更加棘手。它看起來像assign_nested_attributes_for_collection_association變得更加複雜,因此在處理所有場景時很難重寫。 –

相關問題