什么是实现gmail风格的最佳方式“撤消”在Rails?
-
03-07-2019 - |
题
我认为有一个“撤消”非常重要方法ala gmail 在销毁记录时,而不是显示一个恼人的弹出窗口,上面写着“你确定吗?”。
我实现此方法的方法是使用“deleted_at”。模型中的timestamp列,当调用 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或后台任务来真正破坏“删除”。经过一段时间后,我们不知所措。
适合我,易于实施,但我很好奇是否有更好的方法来实现此功能?也许有一个插件或宝石提供我不知道的?
其他提示
此处的文件似乎有效您需要什么,但我个人认为必须有一些东西可以自动过滤掉已删除的记录,除非您明确包含它们。这样,除非您包含一个重新包含它们的参数或命名范围,否则它们确实会被删除。
不幸的是,我没有写过一篇,而且业余时间有限,但不应该那么难,应该吗?
您可以将已删除的项目移动到单独的集合(或表格或其他任何内容)中 - 然后查看原始列表中的任何内容都会看到它已被删除,并且您可以在方便的时候处理新列表。
PaperTrail 做得很好。有一个很好的 Railscast ,虽然现在有点旧了。我知道很久以前就提出过这个问题,但我出于好奇而偶然发现了这个问题,并且认为我应该参考一个最新的方法来做这件事。
责任链模式
class Action
{
Perform(context);
Undo(context);
}
不隶属于 StackOverflow