SuperAPI AI 工具集

active-record-callbacks

通用与其它

查看项目

更新于 10-15 23:57

技能介绍

用途:指导 Rails 项目中 Active Record 回调的取舍与写法,判断逻辑该放回调还是服务对象,并排查回调顺序与意外行为。

主要能力:梳理创建、更新、销毁的完整生命周期顺序(before_validation、before_save、before_create/update、after_save、after_commit 等);区分 after_save 与 after_commit 的事务安全性;说明 throw :abort 中止链的行为(save 返回 false、save! 抛 ActiveRecord::RecordNotSaved 等);列出跳过回调的方法(update_column、update_all、delete_all、insert_all、upsert_all、increment!、touch_all);介绍 around_* 回调、回调对象复用、before_destroy 与 dependent: :destroy 的顺序问题,以及 ActiveRecord::Suppressor 临时抑制回调。

使用方式:以宏式注册私有方法(如 before_validation :normalize_email),单行逻辑可用块,避免 lambda 风格;条件回调优先用 :if/:unless 符号;外部调用(邮件、API、任务队列、文件系统)一律用 after_commit 而非 after_save;需要中止时用 throw :abort,不要抛异常。

适用场景:设置默认值、规范化数据、派生值、生成 token/slug、维护计数器缓存、清理所属资源等模型内在逻辑。

限制:发送邮件、调用外部 API、创建其他记录、复杂业务逻辑、依赖上下文的判断、授权检查、业务日志等不应放入回调;update_all 等批量操作会完全跳过回调;after_create_commit 与 after_update_commit 同名方法会互相覆盖,应改用 after_save_commit;after_commit 每个事务每条记录只触发一次。资料未提供具体版本要求与安装步骤。