当删除记录时,我认为拥有类似于 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
我将只需要添加一个条件来过滤掉"已删除"的foo在调用find方法时。或许可以设置cron或后台任务,在一段时间后真正销毁这些"已删除"的foo。
这对我来说可行且易于实现,但我很想知道是否有更好的实现方式?也许有一个插件或gem可以提供这个功能,而我不知道?