在Rails中实现gmail样式"撤消"的最佳方法是什么?

Jas*_*Ong 15 gmail activerecord ruby-on-rails undo revert

我认为重要的是有一个" 撤销 "的方法ALA 的Gmail销毁记录的时候,而不是显示恼人的弹出,上面写着:" 你确定吗? ".

我实现这个的方法是在模型中有一个"deleted_at"时间戳列,当调用destroy方法时,它会被加上时间戳

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

恢复/撤消,我只需将同一列设置为nil

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

当我调用find方法时,我只需添加一个条件来过滤掉"已删除"的foos.也许设置一个cron或后台任务来在一段时间后真正破坏"已删除"的foos.

适合我,易于实现,但我很好奇是否有更好的方法来实现此功能?也许有一个插件或宝石提供我不知道的?

Til*_*dor 4

确实有一些插件可以在Agile Web Development中找到。

以下是似乎与您的描述相符的插件的链接和摘要:

  1. 充当偏执狂:使您的活动记录“偏执狂”。删除它们并不会删除该行,而是设置一个deleted_at字段。查找已重载以跳过已删除的记录。
  2. 充当软删除:提供软删除 ActiveRecord 模型的功能。