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
相关产品推荐
相关产品推荐

