You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7中GET方法表单无法设置turbo_stream格式的问题

在Rails 7中实现GET方法的Turbo Stream表单

要让GET请求的form_with以turbo_stream格式发送请求,需要手动指定请求格式,并确保路由和控制器支持该格式的响应,具体步骤如下:

1. 修改表单代码

在form_with中明确指定请求格式为turbo_stream,同时保留method: :get:

<%= form_with url: search_orders_path(format: :turbo_stream), method: :get do |f| %>
  <!-- 你的表单字段,比如搜索输入框 -->
  <%= f.text_field :keyword %>
  <%= f.submit "搜索" %>
<% end %>

也可以直接通过format参数传递(效果与URL中指定一致):

<%= form_with url: search_orders_path, method: :get, format: :turbo_stream do |f| %>
  <!-- 表单内容 -->
<% end %>

2. 确保路由支持格式指定

在config/routes.rb中,确保search_orders的GET路由允许格式后缀:

get 'search_orders', to: 'orders#search', format: true

3. 控制器处理Turbo Stream响应

在对应的控制器动作(比如OrdersController#search)中,添加turbo_stream格式的响应处理:

def search
  # 执行你的搜索逻辑,示例:
  @orders = Order.where("name LIKE ?", "%#{params[:keyword]}%")

  respond_to do |format|
    format.turbo_stream # 会渲染对应路径的turbo_stream模板(如app/views/orders/search.turbo_stream.erb)
    format.html # 保留HTML响应,兼容非Turbo场景
  end
end

原理说明

Rails 7中form_with默认启用remote: true,但对GET请求默认会以html格式发送。通过指定format: :turbo_stream,会修改请求的Accept头为text/vnd.turbo-stream.html,同时在URL中带上.turbo_stream后缀(路由允许的情况下),让Rails识别并处理Turbo Stream格式的响应。

内容的提问来源于stack exchange,提问作者banh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:32:15