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

Rails 7中无需提交表单,用下拉框刷新Turbo Frames的问题

解决Turbo场景下set_property_transaction动作的406错误

核心原因

406错误本质是请求期望的响应格式(JSON/JS)和控制器实际能返回的格式不匹配——哪怕你有模板,只要没明确指定响应HTML,Rails就会判定找不到对应格式的模板。

具体解决方案

  • 修正控制器响应格式
    在PropertiesController的set_property_transaction动作里明确指定响应HTML格式(Turbo Frames/Streams依赖HTML片段渲染):

    def set_property_transaction
      # 你的业务逻辑:比如根据参数获取对应字段数据
      @transaction_type = params[:property_transaction]
    
      respond_to do |format|
        format.html # 明确响应HTML,匹配你的erb模板
      end
    end
    

    或者更简洁的写法:

    def set_property_transaction
      @transaction_type = params[:property_transaction]
      render formats: :html
    end
    
  • 调整请求的Accept头
    如果是用Stimulus发起请求,确保请求头Accept设置为text/html,而非默认的JSON:

    // property_transaction_controller.js
    import { Controller } from "@hotwired/stimulus"
    
    export default class extends Controller {
      selectTransaction() {
        const transactionValue = this.element.value
        const formData = new FormData()
        formData.append('property_transaction', transactionValue)
    
        fetch('/set_property_transaction', {
          method: 'POST',
          headers: {
            'Accept': 'text/html', // 关键:告诉服务器返回HTML格式
            'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content
          },
          body: formData
        })
        .then(response => response.text())
        .then(html => {
          // 用Turbo更新对应DOM元素或Frame
          document.getElementById('transaction-fields').innerHTML = html
        })
      }
    }
    
  • 验证模板位置与命名
    确认模板文件set_property_transaction.html.erb(或对应的局部模板)放在app/views/properties/目录下,文件名拼写完全一致、无大小写错误。如果渲染的是局部模板,需在控制器里明确指定:

    render partial: 'property_transactions', formats: :html
    
  • 检查路由配置
    确保路由没有限制请求格式,避免写成:

    post '/set_property_transaction', to: 'properties#set_property_transaction', format: :json
    

    正确的路由应允许HTML格式:

    post '/set_property_transaction', to: 'properties#set_property_transaction'
    

内容的提问来源于stack exchange,提问作者Manuel Santiago Yépez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:35:24