记得当初上课时第一次听到软删除这个词蛮震惊的,没想到网路世界是这麽可怕的阿。
网路上的删除有分两种,软删除以及硬删除:
在 Rails 内,当你使用 destroy 这个方法後就会直接从资料库删除档案,也就是硬删除。
假如想要使用软删除可以使用 paranoia 套件搭配 acts_as_paranoid。
现在我想把一个笔记的删除变成软删除,我可以这样做:
gem 'paranoia', '~> 2.4', '>= 2.4.3' # 目前 2.4.3 为最新版
rails g migration deleted_at
class DeletedAt < ActiveRecord::Migration[6.1]
def change
add_column :notes, :deleted_at, :datetime # 新增栏位: 资料表名称,栏位名称,型态
add_index :notes, :deleted_at # 新增索引: 加快查询,概念有点像写书会加的附录
end
end
4.1 在 note model 新增 default_scope 让所有的笔记都先预设为显示 deleted_at 栏位里面值是 nil 的笔记。
default_scope { where(deleted_at: nil) }
4.2 或是直接在 note model 输入 acts_as_paranoid 也可以完成上述的行为。
acts_as_paranoid
def destroy
@note.update(deleted_at: Time.now)
end
=> 如此一来以後使用 destroy 方法删除档案时就会变成软删除了。
那假如我想用硬删除该怎麽办呢?
paranoia 帮你新增了一个方法叫 really_destroy!
使用他就可以变成硬删除了。
参考:
[1]paranoia套件
>>: day29 大量操作怎麽办? 连volatile都救不了我QQ
在debian下使用alien转换MegaRAID Storage Manager的RPM到deb过...
延续昨天 今天的目标是把注册功能完善! 这是昨天的console.log 来试试看 把id(帐号)设...
写Javascript前必要小知识 1.<!DOCTYPE html> 为 HTML 5...
(ISC)² 道德准则仅适用於 (ISC)² 会员。垃圾邮件发送者的身份不明或匿名,这些垃圾邮件发送...
题组回顾与观念统整 Stack 和 Queue 绝对是资料结构中不可以错过的一种容器,不只用於资料...