添加deleted_at
到需要假删除的模型上。
app/models/concerns/soft_deletable.rb
module SoftDeletable
extend ActiveSupport::Concern
included do
scope :deleted, -> { where.not(deleted_at: nil) }
scope :without_deleted, -> { where(deleted_at: nil) }
scope :with_deleted, -> { unscope(where: :deleted_at) }
default_scope { without_deleted }
end
def destroy(mode = :soft)
if mode == :hard
super()
else
update(deleted_at: Time.zone.now)
end
end
def restore
update(deleted_at: nil)
end
def deleted?
deleted_at?
end
end
把需要假删除的模型引入假删除的 concerns,include SoftDeletable
。