名称:rails-dev 描述:Ruby on Rails 性能和可维护性优化指南,用于构建后端 API 和前端 Web 应用程序。该技能应在编写、审查或重构 Ruby on Rails 代码时使用,以确保控制器、模型、ActiveRecord 查询、缓存、视图、API 设计、安全和后台作业的最佳模式。触发于涉及 Rails 控制器、ActiveRecord 查询、迁移、Turbo/Hotwire、API 端点、后台作业或 Rails 性能改进的任务。
社区 Ruby on Rails 开发最佳实践
全面的 Ruby on Rails 应用程序性能和维护性优化指南,由社区维护。包含 45 条规则,分为 8 个类别,按影响优先级排序,以指导自动重构和代码生成。
何时应用
参考这些指南时:
- 编写新的 Rails 控制器、模型或视图
- 优化 ActiveRecord 查询和数据库访问模式
- 实现缓存策略(片段缓存、俄罗斯娃娃缓存、低级缓存)
- 构建或重构 API 端点
- 添加 Turbo Frames 和 Streams 以支持交互式 UI
- 审查代码中的 N+1 查询和安全漏洞
- 使用 Sidekiq 或 Active Job 设计后台作业
- 编写或审查数据库迁移
规则类别按优先级排序
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 数据库与 ActiveRecord | 关键 | db- |
| 2 | 控制器与路由 | 关键 | ctrl- |
| 3 | 安全 | 高 | sec- |
| 4 | 模型与业务逻辑 | 高 | model- |
| 5 | 缓存与性能 | 高 | cache- |
| 6 | 视图与前端 | 中高 | view- |
| 7 | API 设计 | 中 | api- |
| 8 | 后台作业与异步 | 低中 | job- |
快速参考
1. 数据库与 ActiveRecord (关键)
db-eager-load-associations- 预加载关联以消除 N+1 查询db-add-database-indexes- 在查询列上添加数据库索引db-select-specific-columns- 仅选择所需列db-batch-processing- 使用 find_each 进行大数据集迭代db-avoid-queries-in-loops- 避免在循环内进行数据库查询db-use-scopes- 在模型上定义可重用的查询作用域db-safe-migrations- 编写可逆零停机迁移db-exists-over-count- 使用 exists? 而不是 count 进行存在性检查
2. 控制器与路由 (关键)
ctrl-thin-controllers- 通过委托给模型和服务保持控制器简洁ctrl-strong-params- 始终使用强参数进行批量赋值ctrl-restful-routes- 遵循 RESTful 路由约定ctrl-before-action-scoping- 使用 only/except 限定 before_action 回调范围ctrl-respond-to-format- 使用 respond_to 支持多格式响应ctrl-rescue-from- 在控制器中使用 rescue_from 处理错误
3. 安全 (高)
sec-parameterized-queries- 切勿在 SQL 中插值用户输入sec-strong-params-whitelist- 白名单许可参数,切勿黑名单sec-authenticate-before-authorize- 在每个请求中先认证后授权sec-csrf-protection- 为所有表单提交启用 CSRF 保护sec-scope-queries-to-user- 将查询限定到当前用户以进行授权
4. 模型与业务逻辑 (高)
model-validate-at-model-level- 在模型级别验证数据model-avoid-callback-side-effects- 避免在模型回调中产生副作用model-use-service-objects- 将复杂逻辑提取到服务对象中model-scope-over-class-methods- 使用作用域而不是类方法进行查询组合model-use-enums- 使用枚举表示有限状态字段model-concerns-for-shared-behavior- 使用 concern 实现共享模型行为model-query-objects- 将复杂查询提取到查询对象中
5. 缓存与性能 (高)
cache-fragment-caching- 使用片段缓存处理昂贵视图部分cache-russian-doll- 使用俄罗斯娃娃缓存处理嵌套集合cache-low-level- 使用 Rails.cache.fetch 缓存计算数据cache-counter-cache- 使用计数器缓存关联计数cache-conditional-get- 使用条件 GET 和 stale? 进行 HTTP 缓存
6. 视图与前端 (中高)
view-collection-rendering- 使用集合渲染替代循环局部视图view-turbo-frames- 使用 Turbo Frames 实现部分页面更新view-turbo-streams- 使用 Turbo Streams 实现实时页面突变view-form-with- 使用 form_with 替代 form_tag 或 form_forview-avoid-logic-in-views- 将显示逻辑移至助手或展示器中
7. API 设计 (中)
api-serializers- 使用序列化器实现一致的 JSON 响应api-pagination- 始终对集合端点进行分页api-versioning- 从第一天开始版本化 APIapi-error-responses- 返回结构化错误响应api-avoid-jbuilder-hot-paths- 避免在高流量端点上使用 Jbuilder
8. 后台作业与异步 (低中)
job-idempotent-design- 设计幂等作业job-small-payloads- 向作业传递 ID,而不是序列化对象job-error-handling- 为作业配置重试和错误处理job-unique-jobs- 防止重复作业入队
如何使用
阅读个别参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则模板 |
| metadata.json | 版本和参考信息 |