全书目录

第二十八篇:Ruby on Rails 完全指南 —— 城市脚手架工务署宇宙

第十四章:Hotwire / Turbo / Stimulus —— 不拆整栋楼,也能完成局部改造

2 分钟 475 字 第 507 / 962 个阅读单元

到了现代 Rails,前端交互这一层最值得建立的心智不是“要不要立刻上 React”。

而是先理解官方主线:

text
服务器继续产 HTML
浏览器只做局部更新与轻交互增强

这就是 Hotwire 的核心味道。

其中 Turbo 很重要:

  • Turbo Drive:页面导航更快,减少整页重载感
  • Turbo Frames:把页面切成可独立刷新的局部区块
  • Turbo Streams:服务器直接发“插入、替换、删除某块 HTML”的指令

举个最有 Rails 味的例子。
新增许可单后,不一定非要整页重刷。

控制器:

ruby
def create
  @permit = Permit.new(permit_params)

  if @permit.save
    respond_to do |format|
      format.html { redirect_to permits_path, notice: "许可单已创建。" }
      format.turbo_stream
    end
  else
    render :new, status: :unprocessable_entity
  end
end

对应的 create.turbo_stream.erb

erb
<%= turbo_stream.prepend "permits", partial: "permits/permit", locals: { permit: @permit } %>

页面里的列表容器:

erb
<div id="permits">
  <%= render @permits %>
</div>

这套心智特别像什么?

像工务署说:

text
“别拆整个大厅重建,
只把新办好的这一块公告牌插进去。”

这和很多 SPA 的脑回路差异很大。

SPA 常见路线是:

text
后端给 JSON
前端自己重建页面状态

Turbo 路线更像:

text
后端直接发新的 HTML 片段
前端负责把这块贴到正确位置

如果你只是做:

  • 中后台
  • 表单密集系统
  • 列表增删改查
  • 局部弹窗、筛选、切片展示
  • 实时局部更新

Hotwire 往往比“全量前端状态管理大工程”更省事。

Stimulus 则是轻量行为层,适合:

  • tab 切换
  • 展开收起
  • 表单联动
  • 复制按钮
  • 简单组件行为

它不是来接管整个前端宇宙的。
它像大厅里的局部电工。