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
相关产品推荐
相关产品推荐

