用途:为 Rails 项目的开发与测试数据选择合适方案,并规范种子编写。适用于需要准备静态参考数据、测试场景或复杂关联数据的场景,触发词包括 seeds、fixtures、test data、development data。
主要能力与选型:静态参考数据用 db/seeds.rb 配 find_or_create_by!;测试场景用 spec/factories/ 中的 FactoryBot;复杂关系可两者结合。
硬性规则:绝不把生产数据提交进 seeds;测试专用场景一律用 factories;种子必须幂等(可安全重复运行);绝不在 seeds、factories 或示例中硬编码凭据(密码、API 密钥、机密),应使用 ENV 变量(如 ENV.fetch('DEFAULT_SEED_PASSWORD')) 或 SecureRandom.hex(16) 生成非生产数据,生产机密用 rails credentials:edit 管理且不得提交。
核心流程:编写幂等种子(find_or_create_by!,重复运行安全);按环境隔离(用 Rails.env 守卫非生产数据);运行 rails db:seed(全新数据库可用 rails db:setup);再次运行 rails db:seed 验证幂等性,确认无重复或报错;用 rails console 抽查记录存在且属性正确。
最小示例要点:在 db/seeds.rb 中用 Role.find_or_create_by! 建立 admin、member 等静态角色;仅在 Rails.env.development? 下创建开发用户,密码取自 ENV.fetch('DEFAULT_SEED_PASSWORD', SecureRandom.hex(16))。更完整的 FactoryBot 定义与复杂关系模式参见 EXAMPLES.md,复杂工作流或依赖迁移的种子数据参见 references/workflow.md。
输出风格:使用符合 Rails 习惯的种子写法,结构清晰,严格遵守凭据与幂等规则,并附验证命令。默认语言为英文,除非明确要求其他语言。
集成:设置测试场景时可与 write-tests 链式使用;确保数据库 schema 对齐时可与 review-migration 链式使用。限制:资料未提供具体版本要求、性能数据或收费标准。