用途:按测试先行(TDD)流程生成 Rails concern,把模型或控制器间的共享行为抽成可复用模块。
主要能力:支持模型 concern 与控制器 concern;覆盖共享校验、通用 scope、共享回调(如 UUID 生成)、控制器认证/授权辅助、分页或过滤逻辑等场景;提供 UUID 生成、软删除、可搜索、可审计、控制器过滤等常见模式示例。
使用方式:先写失败 spec 确认 RED,再在 app/models/concerns/ 或 app/controllers/concerns/ 实现 concern,最后运行 spec 确认 GREEN。运行命令:bundle exec rspec spec/models/concerns/[concern_name]_spec.rb。模型 concern 通过包含它的模型或临时测试类测试,控制器 concern 通过 request spec 测试。实现时使用 extend ActiveSupport::Concern,回调/校验/scope 放在 included 块,类方法放在 class_methods 块,实例方法放在块外。
适用场景:多处复用的校验、scope、回调、控制器辅助与过滤逻辑。
限制:仅用于单一位置(YAGNI)、把不相关方法堆成“上帝” concern、或本应做成 service object 的逻辑,都不建议使用 concern。官方文档未提供更多收费、平台或效果信息。