2013-09-25 64 views
2

我試圖解決的問題是阻止循環引用不僅僅是直接的父對象和子對象之間,而且我還想確保新的子對象沒有被用作記錄層次結構中某個父對象的父對象。如何防止層次結構中的循環引用?

我想我可能會被執行的代碼, self.parent = maybe_the_wrong_choice 之前攔截父母的分配解決問題,然後保存更改之前,做重要的驗證。

我在正確的道路上嗎?如果是這樣,在保存記錄之前,如何獲取模型驗證中屬性的舊值(例如self.old_parent)並將其與新父級(self.parent)進行比較?

感謝您的期待!

+0

你能提供更多的信息和例子嗎? –

回答

0

你可以通過self.parent_was和self.parent得到父親的父親。

+0

讓我用一個例子來闡明我的問題: – user2041343

+0

讓我用一個例子來闡明我的問題: 等級1: 2級:A1 A2 A3 等級3:A11 A12 A13 ... A31 A32 4級:A111 ... 上面的層次結構顯示A是A1的父親,A3是A32的父親 現在,請考慮以下情況: - A11.parent = A3#不好,因爲A11已經有父級(A1) - A14 = Category.create!(name:'A14') - A14.parent = A1#這很好,因爲A14.parent等於零 - A31.parent = A14#不好,因爲A31已經有一位家長(A3) - A.parent = A11#不好,因爲A已經有孩子 – user2041343