用途:按测试先行(TDD)流程生成 Rails concern,把多个模型或控制器共用的行为抽成 ActiveSupport::Concern 模块。
主要能力:覆盖模型 concern 与控制器 concern;提供 UUID 生成、软删除、搜索、审计、slug、多租户归属、令牌等常见模式;给出测试写法(模型 concern 通过包含它的模型测试,或用共享测试模块;控制器 concern 用集成测试)。
使用方式:先写失败测试并运行 bin/rails test 确认 RED;再在 app/models/concerns/ 或 app/controllers/concerns/ 实现 concern,用 extend ActiveSupport::Concern、included 块放回调/校验/scope、class_methods 块放类方法、实例方法放块外;再次运行测试确认 GREEN。在模型或控制器中用 include 引入。
适用场景:跨模型共享校验、scope、回调(如 UUID、slug),控制器认证/授权辅助、分页或过滤逻辑、审计追踪。
限制:仅用于确实被多处复用的逻辑(YAGNI);避免把不相关方法堆成“上帝 concern”;需要自身状态或配置的逻辑应改用类;业务逻辑更适合 service object;保持单一职责、命名清晰、数据库无关(避免 ILIKE 等特定 SQL)。