2008-10-14 66 views
15

我認爲重要的是要有一個「撤銷」方法ALA 的Gmail銷燬記錄的時候,而不是顯示惱人的彈出,上面寫着:「你確定嗎?」。在Rails中實現gmail樣式「撤消」的最佳方式是什麼?

,我已經實現了這是在當破壞方法,它被打上時間戳被稱爲

def destroy 
    @foo = Foo.find(params[:id]) 
    @foo.update_attribute(:deleted_at, Time.now) 
    ... 
end 

復歸模型中的「deleted_at」時間戳列的方式/撤消我會只是設置在同一列爲零

def revert 
    @foo = Foo.find(params[:id]) 
    @foo.update_attribute(:deleted_at, nil) 
    ... 
end 

我就必須要添加到過濾掉的條件「已刪除」的Foo當我打電話find方法。也許設置一個cron或後臺任務來在一段時間後真正銷燬「已刪除」的foos。

適用於我,易於實現,但我很好奇,是否有更好的方法來實現此功能?也許有一個插件或寶石提供了我不知道的事情?

+0

你真的在乎它何時被刪除?標誌不夠嗎? – 2008-10-14 15:10:56

+4

是的,我真的不在乎什麼時候它被刪除,但是這些知識可能會有用。無論如何,我認爲時間戳是一個很好的標誌。 – JasonOng 2008-10-15 00:54:03

+1

我同意一般情緒。然而,通過搶先需求這樣一個可能的問題是,它可能欺騙其他開發人員搜索當前使用的(時間戳)信息的位置。當它實際上並沒有在某個地方使用時,它代表了一個鬆散的線程,這對於外行來說通常是令人沮喪和耗時的。 – Magne 2011-05-18 10:04:10

回答

4

確實有一些插件可以在Agile Web Development找到。

下面是插件,這似乎符合你描述的鏈接和摘要:

  1. Acts as Paranoid:讓你的活動記錄「偏執狂」。刪除它們並不會刪除該行,而是設置一個deleted_at字段。查找過載以跳過刪除的記錄。
  2. Acts as soft deletable:提供軟刪除ActiveRecord模型的功能。
0

有一個文件here似乎正在做你所要求的,但我個人認爲那裏必須有東西可以自動濾除已刪除的記錄,除非你特別包含它們。這樣他們真的會出現刪除,除非你包含一個參數或命名範圍,重新包含它們。

不幸的是,我沒有寫一篇,業餘時間有限,但它不應該那麼辛苦,應該嗎?

-1

責任鏈模式

class Action 
{ 
    Perform(context); 
    Undo(context); 
} 
0

您可以將已刪除的郵件到一個單獨的集合(或表,或其他) - 那麼任何看起來在原始列表中會看到,它已經被刪除,你可以在方便時處理新列表。

0

PaperTrail做得很好。它有一個很好的Railscast,雖然它現在有點老了。我知道這個問題在很久以前就被問到過了,但是出於好奇,我偶然發現了這個問題,並且認爲我應該引用一個很好的最新方式來做到這一點。

相關問題