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

Rails中default_scope -> { kept }语句的含义是什么?

Rails 代码 default_scope -> { kept } 作用说明

kept 方法的来源与含义

  • 该方法是 Rails 6.1 及以上版本内置的 Active Record 软删除配套查询作用域,不需要额外引入第三方 gem 即可使用,使用前提是对应模型的数据库表已经添加了 discarded_at 类型为 datetime 的字段。
  • kept 的作用是筛选所有未被软删除的记录,也就是匹配 discarded_at 字段值为 nil 的数据。和它功能对应的作用域是 discarded,用于筛选已经被软删除的记录。

该行代码的实际作用

你看到的代码:

default_scope -> { kept }

是给当前模型设置了全局默认查询范围:
后续该模型的所有默认查询操作(包括 all、find、where 等),都会自动过滤掉已被软删除的记录,默认只返回正常未删除的数据。

常见配套使用注意点

  • 如果需要查询包含已软删除在内的全部记录,需要手动调用 unscoped 取消默认范围,示例:YourModel.unscoped.all
  • 如果仅需要查询已被软删除的记录,可直接调用对应作用域:YourModel.discarded
  • 软删除本质是给数据打删除标记,不会真正删除数据库中的记录,适合需要保留删除历史、支持数据恢复的业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:12:02