2016-07-22 87 views
0

我有一個配方數據庫,當創建一個新配方時,我想創建它的兩個版本(不能編輯的原始版本)和另一個可編輯的版本。這樣用戶可以將當前版本與原始版本進行比較。在rails中創建時創建兩個版本的記錄

我有兩個字段,將它們聯繫起來,並確定他們(is_original:布爾和original_id:整數)

我無法弄清楚在何處放置代碼都進行參數調整和兩次創造的配方。我想創建第一個is_original設置爲true和original_id。然後,我需要從剛剛創建的配方中獲取id,並在下一個配置中設置original_id以匹配。

+0

我知道這不是你要求的,但你會考慮使用像「審計」寶石?我們用它來追蹤記錄中的歷史變化,在這種情況下,原始的「快照」將成爲第一個「審計」。把它丟去外面。 – Tass

回答

1

使用after_create回調。

此外,爲什麼還要打擾is_original字段,如果您只能爲original_id設置null值。只是做一個is_original?方法,查看original_id字段,如果爲null,則返回true。

+0

因爲我在創建數據庫結構時起牀晚了,並沒有考慮到這個問題,所以會在我的結構中進行調整。所以對於rails來說很陌生並且無法找出在回調方法中放置什麼以獲得第二個創建的 – DRing

+0

在原始回調中使用self,而使用new創建YourClass.new以創建新記錄。手動轉移道具或創建一個克隆(new_record = old_record.dup) – pixelearth

+0

好吧,所以當測試它以更改屬性時,我得到了after_create方法...但是我無法獲得它來創建新記錄,這是我嘗試過的: new_recipe = self.dup new_recipe.original_id = self.id new_recipe.save – DRing

0

首先創建原件。創建完成後,如果已編輯 - 創建可編輯版本。所有的編輯都可以創建原創的孩子,並且基本的版本控制系統將會到位。

不要一次創建兩個對象 - 第二個只是第一個的副本。這似乎沒有必要,特別是如果它從未編輯。

我同意@pixelearth的布爾值。使用parent_id或original_id。