用途:在采用 Ruby on Rails、PostgreSQL、Hotwire(Turbo + Stimulus)、Tailwind CSS 技术栈的项目中编写或生成新代码时,遵循本约定。它只覆盖该技术栈特有的模式,跨领域设计原则(DRY、YAGNI、结构化日志、按目录规则)交由 rails-code-conventions 处理。
主要能力与工作流:强制测试门禁——所有新代码必须先写并验证测试再实现:1) 编写 spec(bundle exec rspec spec/[path]_spec.rb);2) 确认失败;3) 写实现;4) 确认通过;5) 必要时重构并保持绿色。功能开发按顺序组合:模型(校验、关联、scope,循环中使用的关联用 includes 预加载)→ 服务对象(把非平凡业务逻辑移出控制器)→ 控制器(保持精简,委托服务,响应 turbo_stream 与 html)→ 视图/Turbo 接线(用 <turbo-frame> 包裹动态区块,控制器广播 turbo_stream)→ Stimulus(仅当 Turbo 无法处理客户端交互时添加)→ Tailwind(应用工具类,重复模式提取为 partial 或 Stimulus target)。每步应可独立测试。
关键模式:Turbo Frames 用 <turbo-frame id="order-<%= @order.id %>"> 包裹区块,链接用 data: { turbo_frame: ... } 定向;Turbo Streams 在控制器 respond_to 中渲染 turbo_stream.replace;避免 N+1 用 Order.includes(:line_items);服务对象用 Orders::CreateOrder.call(...) 返回结果。
安全:写操作控制器使用强参数;防 XSS(html_escape,避免 raw)、CSRF(Rails 默认开启)、SQLi(用 AR 查询方法或 sanitize_sql);认证用 Devise,授权用 Pundit。
限制与常见错误:业务逻辑不应写在视图中;循环中避免 N+1;原始 SQL 必须参数化;测试始终用 FactoryBot 而非 fixtures。危险信号包括控制器动作超过 15 行业务逻辑、必填字段无校验、视图中嵌入 10 行以上 Ruby 条件、循环关联未 includes、应放入 I18n 的硬编码字符串。可与 rails-code-conventions、rails-code-review、ruby-service-objects、rspec-best-practices、rails-architecture-review 链式使用。