📦 Dhh Rails Style — DHH Rails 风格 — 遵循 37signals 风格的 Ruby/Rails 编码指南

v0.1.0

在编写 Ruby 与 Rails 代码时,采用 DHH 标志性的 37signals 风格:强调约定优于配置、追求简洁优雅、注重可读性与开发者幸福感,遵循 Rails 默认约定,减少冗余抽象,用清晰命名和 RESTful 设计传递意图,让代码像散文一样自然流畅。

0· 304·1 当前·1 累计
by @pixelxiao (skye)·MIT-0
下载技能包
License
MIT-0
最后更新
2026/3/4
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
安全
high confidence
一个仅包含指令的风格和指导技能,用于以 DHH/37signals 约定编写 Ruby/Rails。无需安装、无必需凭据,要求与目的相符。
评估建议
这是一个仅包含指令的风格指南,提供了详细的、有偏见的 Rails 应用程序结构示例(遵循 DHH/37signals 风格),不请求凭据、不安装软件、不执行代码。内部逻辑一致,安全可用,但在应用某些模式前(如自定义魔术链接认证、数据库后端队列/缓存、硬删除、使用参数设置 Current.account、cookie 作用域)应谨慎考虑安全、合规性和运营需求。...
详细分析 ▾
用途与能力
技能名称/描述与内容匹配:所有文件为 Rails 应用风格指导和参考示例。无环境、无二进制、无安装要求,适合编码风格/参考技能。
指令范围
SKILL.md 指导代理读取包含的参考材料并将模式应用于用户提供的 Ruby/Rails 代码。无指令读取无关系统文件、环境秘密或向外部端点发送数据。
安装机制
无安装规格和无需执行的代码文件。仅指令的技能风险最低;无下载或存档提取。
凭证需求
技能未声明必需的环境变量或凭据。一些示例片段引用 ENV.fetch 和配置环境名称(典型的应用示例),但这些仅为示例,不由技能本身要求。
持久化与权限
标志显示默认调用行为(不总是:true)。技能不请求永久存在或修改其他技能或系统配置。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv0.1.02026/3/4

DHH Rails 风格技能的初始发布。- 提供 Ruby 和 Rails 项目(37signals/DHH 风格)的指导和代码审查。- 包括原则:优先使用原生 Rails、模型驱动、控制器简洁、REST 纯度、Current 属性、Hotwire/Turbo 模式和'清晰优于聪明'。- 提供命名、REST 资源映射、Ruby 习惯、DHH 首选模式的快速参考。- 描述使用和避免的内容(无 Devise、Sidekiq、Redis 等)。- 支持架构、测试、Gems、代码审查和一般 Rails 风格指导。

无害

安装命令

点击复制
官方npx clawhub@latest install dhh-rails-style
镜像加速npx clawhub@latest install dhh-rails-style --registry https://cn.longxiaskill.com

技能文档

<目标> 应用 37signals/DHH Rails 约定到 Ruby 和 Rails 代码中。此技能提供了从分析生产级 37signals 代码库(Fizzy/Campfire)和 DHH 的代码审查模式中提取的综合领域专业知识。

<基本原则>

核心哲学

"最好的代码是你不写的代码。其次是显而易见的代码。"

原生 Rails 已经足够:

  • 丰富的领域模型优于服务对象
  • CRUD 控制器优于自定义操作
  • Concerns 用于横向代码共享
  • 记录作为状态而非布尔列
  • 数据库支撑一切(不使用 Redis)
  • 在求助 gem 之前先构建解决方案

他们刻意避免:

  • devise(使用自定义的约 150 行认证替代)
  • pundit/cancancan(模型中的简单角色检查)
  • sidekiq(Solid Queue 使用数据库)
  • redis(一切用数据库)
  • view_component(partial 足够用)
  • GraphQL(REST 配合 Turbo 足够用)
  • factory_bot(fixtures 更简单)
  • rspec(Rails 自带 Minitest)
  • Tailwind(使用原生 CSS 和层)

开发哲学:

  • 交付、验证、优化
  • 原型质量的代码到生产环境以学习
  • 修复根本原因,而非症状
  • 写时操作优于读时计算
  • 数据库约束优于 ActiveRecord 验证

<需求> 你在做什么?

  • 控制器 - REST 映射、concerns、Turbo 响应、API 模式
  • 模型 - Concerns、状态记录、回调、作用域、POROs
  • 视图和前端 - Turbo、Stimulus、CSS、partials
  • 架构 - 路由、多租户、认证、任务、缓存
  • 测试 - Minitest、fixtures、集成测试
  • Gems 和依赖 - 什么使用什么避免
  • 代码审查 - 根据 DHH 风格审查代码
  • 一般指导 - 哲学和约定

指定一个数字或描述你的任务。

<路由>

响应参考阅读
1, controllercontrollers.md
2, modelmodels.md
3, view, frontend, turbo, stimulus, cssfrontend.md
4, architecture, routing, auth, job, cachearchitecture.md
5, test, testing, minitest, fixturetesting.md
6, gem, dependency, librarygems.md
7, review阅读所有参考,然后审查代码
8, general task根据上下文阅读相关参考
阅读相关参考后,将模式应用到用户的代码中。

<快速参考>

命名约定

动词: card.closecard.gildboard.publish(不是 set_style 方法) 谓词: card.closed?card.golden?(从相关记录的存在派生) Concerns: 描述能力的形容词(CloseablePublishableWatchable控制器: 匹配资源的名词(Cards::ClosuresController

作用域:

  • chronologicallyreverse_chronologicallyalphabeticallylatest
  • preloaded(标准预加载名称)
  • indexed_bysorted_by(参数化)
  • activeunassigned(业务术语,而非 SQL 风格)

REST 映射

不创建自定义操作,而是创建新资源:

POST /cards/:id/close → POST /cards/:id/closure
DELETE /cards/:id/close → DELETE /cards/:id/closure
POST /cards/:id/archive → POST /cards/:id/archival

Ruby 语法偏好

# 带空格的符号数组在方括号内
before_action :set_message, only: %i[ show edit update destroy ]

# 私有方法缩进 private

def set_message @message = Message.find(params[:id]) end

# 无表达式的 case 用于条件 case when params[:before].present? messages.page_before(params[:before]) else messages.last_page end

# bang 方法用于快速失败 @message = Message.create!(params)

# 三元运算符用于简单条件 @room.direct? ? @room.users : @message.mentionees

关键模式

状态即记录:

Card.joins(:closure) # 已关闭的卡片
Card.where.missing(:closure) # 开放的卡片

Current 属性:

belongs_to :creator, default: -> { Current.user }

模型上的授权:

class User < ApplicationRecord
  def can_administer?(message)
    message.creator == self || admin?
  end
end

<参考索引>

领域知识

所有详细模式在 references/ 中:

文件主题
controllers.mdREST 映射、concerns、Turbo 响应、API 模式、HTTP 缓存
models.mdConcerns、状态记录、回调、作用域、POROs、授权、广播
frontend.mdTurbo Streams、Stimulus 控制器、CSS 层、OKLCH 颜色、partials
architecture.md路由、认证、任务、Current 属性、缓存、数据库模式
testing.mdMinitest、fixtures、单元/集成/系统测试、测试模式
gems.md什么使用什么避免、决策框架、Gemfile 示例

<成功标准> 代码符合 DHH 风格当:

  • 控制器映射到资源上的 CRUD 动词
  • 模型使用 concerns 实现横向行为
  • 状态通过记录而非布尔值跟踪
  • 没有不必要的服务对象或抽象
  • 优先使用数据库解决方案而非外部服务
  • 测试使用 Minitest 配合 fixtures
  • 使用 Turbo/Stimulus 实现交互性(不使用重型 JS 框架)
  • 使用现代特性的原生 CSS(层、OKLCH、嵌套)
  • 授权逻辑位于 User 模型上
  • 任务是调用模型方法的浅层包装

<致谢> 基于 The Unofficial 37signals/DHH Rails Style Guide,由 Marc Köhlbrugge 通过深入分析 Fizzy 代码库的 265 个拉取请求生成。

重要免责声明:

  • 由 LLM 生成的指南 - 可能包含不准确之处
  • Fizzy 的代码示例根据 O'Saasy 许可证授权
  • 与 37signals 无关联或未获得其认可

数据来源ClawHub ↗ · 中文优化:龙虾技能库