0

我試圖設置一個特定的用戶帳戶爲「沙盒」,這意味着我想回滾用戶在會話銷燬時所做的任何數據庫更改。在Rails 4中,你將如何記錄和撤消特定於一個用戶的所有數據庫更改?

我看着使用Paper Trail創業板,但我不確定它可以用於回滾特定於某個用戶的更改。

這可能嗎?

+1

你的意思是刪除其所有相關記錄?或者他們實際上在操縱模式? –

+0

聽起來就像你只需要一個沙箱用戶的默認值,並且當他們註銷時你只需將他們的db重置爲該狀態。 – DickieBoy

+0

@KevinBrown:這個想法是「沙箱用戶」可能對已存在的記錄進行更改,並且不是特定於該用戶的記錄。例如,假設有一個「Article」對象,由另一個用戶創建,「sandbox用戶」進行更新。我希望該更新能夠回滾,但不會刪除整個「Article」記錄。 –

回答

0

做到這一點的一種方法是在活動表中記錄用戶的所有活動。然後,當一個沙箱用戶被刪除時,你可以通過該用戶的活動,刪除相應的實體。

bundle g model Activity user:references thing:references{polymorphic}:index 

當會話被破壞:

current_user_activities = Activity.where(user_id: current_user.id) 
current_user_activities.each do |activity| 
    activity.thing.destroy! 
end 

current_user_activities.destroy_all 
+0

當你說「刪除相應的實體」時,你的意思是實際上銷燬他們創建的任何記錄嗎?如果沙盒用戶只是將已經存在的記錄更新了,怎麼辦?我只想回滾該更新,而不是銷燬整個對象。 –

+0

在這種情況下,請在活動表中添加更多列以跟蹤動作(更新,創建等)和action_details(可能爲舊值和受影響字段的新值的json),然後使用這些列來回滾更改。 – Anand

+0

但是,這可能會變得混亂 - 沙盒用戶可能會進行更新,另一個用戶可能會稍後更新到同一事物 - 現在你想要什麼?是否應該回滾原始用戶的更新,從而丟失較新的用戶的更改,還是應該離開它,因爲其他用戶有更新的更新? – Anand

相關問題