我认为重要的是在销毁记录时使用“撤消”方法,而不是显示一个令人讨厌的弹出窗口,说“你确定吗?
我实现这个的方法是在模型中有一个“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.
解决方法
确实有一些插件可以在
Agile Web Development找到.
> Acts as Paranoid:使你的活动记录“偏执”.删除它们不会删除该行,但设置一个deleted_at字段.查找超载以跳过已删除的记录.
> Acts as soft deletable:提供软删除ActiveRecord模型的功能.