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

Rails7中Turbo/Stimulus/RequestJS-Rails POST后页面不刷新问题

Rails 7 Turbo/Stimulus 提交Plaid连接后界面不更新且丢失Notice的问题

我们使用Rails 7(Turbo/Stimulus/RequestJS-Rails)技术栈,通过Stimulus调用PlaidLink接口建立与银行的连接。连接创建完成后,在Stimulus控制器中使用FetchRequest发起POST请求将连接信息持久化到Rails应用,这一步可正常执行。

当前存在两个核心问题:

  • Rails控制器完成连接创建后,控制台显示页面已渲染,浏览器网络标签页也能看到页面内容,但用户界面并未更新
  • 若在Stimulus控制器的response.ok代码块中添加Turbo.visit(".."),页面可正常渲染,但会丢失提示(notice)信息

已尝试的解决方案均无效:

  • 在FetchRequest中添加turbo:false、responseKind: html参数
  • 调整Rails控制器的响应状态码

相关代码

Stimulus控制器代码

const request = new FetchRequest('post', '/plaid/linked_items', {
    body: JSON.stringify({
        plaid_item: {
            institution_id: metadata.institution.institution_id,
            name: metadata.institution.name,
            public_token: public_token,
            link_session_id: metadata.link_session_id,
            plaid_accounts_attributes: metadata.accounts
        }
    })
})
const response = await request.perform()
if (response.ok) {
    const body = await response.text

    Turbo.visit("/plaid/success")
}

Rails控制器代码

respond_to do |format|
  if handler.error.blank?
    if @plaid_item.save
      format.html { redirect_to plaid_linked_items_url, notice: "Plaid item was successfully created." }
      format.json { render :show, status: :created, location: @plaid_item }
    else
      format.html { render :new, status: :unprocessable_entity }
      format.json { render json: @plaid_item.errors, status: :unprocessable_entity }
    end
  else
    @error = PlaidError.create(handler.error.merge(account_id: Current.account.id))

    format.html { render :new, status: :unprocessable_entity, alert: @error.error_message }
    format.json { render json: @plaid_item.errors, status: :unprocessable_entity }
  end
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:14:51