You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用acts_as_paranoid gem调用destroy时如何更新updated_at字段?

在acts_as_paranoid中调用destroy时同步更新updated_at的方法

有两种常用方法可以实现软删除时同时更新updated_at字段:

方法一:重写模型的soft_destroy方法

acts_as_paranoid的destroy方法最终会调用内部的soft_destroy执行软删除逻辑,直接重写这个方法可以一次更新两个字段,效率更高:

class YourModel < ApplicationRecord
  acts_as_paranoid

  def soft_destroy
    update_columns(deleted_at: Time.current, updated_at: Time.current)
  end
end

update_columns会直接执行SQL更新,不触发任何回调,避免额外逻辑干扰。

方法二:使用软删除回调

利用acts_as_paranoid提供的after_soft_destroy回调,在软删除完成后手动更新updated_at:

class YourModel < ApplicationRecord
  acts_as_paranoid

  after_soft_destroy do
    update_column(:updated_at, Time.current)
  end
end

这里用update_column而非update,是为了跳过模型验证和其他回调,防止出现循环调用或不必要的操作。

注意事项

  • 确保模型对应的数据库表存在updated_at字段(Rails生成模型时默认添加,除非手动移除)。
  • 避免使用save或update这类会触发完整回调链的方法,否则可能导致软删除逻辑重复执行或触发意外行为。

内容的提问来源于stack exchange,提问作者nabais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:40:41