我认为在销毁记录时使用“撤消”方法ala gmail 非常重要,而不是显示恼人的弹出窗口,“你确定吗? ”。
我实现这一点的方法是在模型中有一个“deleted_at”时间戳列,当调用 destroy 方法时,该列会被加上时间戳
def destroy
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, Time.now)
...
end
要还原/撤消我只需将同一列设置为nil
def revert
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, nil)
...
end
当我调用find方法时,我只需要添加一个条件来过滤掉“已删除”的foos。也许设置一个cron或后台任务来在一段时间后真正破坏“已删除”的foos。
适合我,易于实施,但我很好奇是否有更好的方法来实现此功能?也许有一个插件或宝石提供我不知道的?
答案 0 :(得分:4)
确实有一些插件可以在Agile Web Development找到。
以下是与您的描述相符的插件的链接和摘要:
答案 1 :(得分:0)
有一个文件here似乎可以满足您的要求,但我个人认为必须有一些内容可以自动过滤掉已删除的记录,除非您明确包含它们。这样,除非您包含一个重新包含它们的参数或命名范围,否则它们确实会被删除。
不幸的是,我没有写过一篇,而且业余时间有限,但不应该那么难,应该吗?
答案 2 :(得分:0)
您可以将已删除的项目移动到单独的集合(或表格或其他任何内容)中 - 然后查看原始列表中的任何内容都会看到它已被删除,并且您可以在方便的时候处理新列表。
答案 3 :(得分:0)
PaperTrail做得很好。它有一个很好的Railscast,虽然它现在有点老了。我知道很久以前就提出过这个问题,但我出于好奇而偶然发现了这个问题,并认为我应该参考一个不错的最新方法。
答案 4 :(得分:-1)
责任链模式
class Action
{
Perform(context);
Undo(context);
}