首页 > 解决方案 > 如何在 ajax 成功重定向上设置 flash 消息

问题描述

据我所知,我已经正确地遵循了这个问题的其他答案。但是,无论出于何种原因,我的实现都不起作用。

我正在发出 ajax 请求并location.href在成功时重定向,并试图弄清楚如何设置 Flash 消息。

这是在我的控制器中:

if payment_service.succeeded?
  flash.notice = 'Your subscription was set up successfully!'
  json = { success: true, redirect_path: root_path }
end

respond_to do |format|
  format.json { render json: json, status: 200 }
end

这就是进行 ajax 调用的地方:

fetch('/subscriptions/confirm_payment', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ payment_method_id: result.paymentMethod.id })
}).then(function(result) {
  result.json().then(function(json) {

  if (response.error) {
    displayError(result.error);
  } else if (response.success) {
    location.href = response.redirect_path;
  }
})

我希望在重定向到redirect_path. 但不显示闪光灯。

标签: javascriptruby-on-railsajax

解决方案


你可以使用flash.keep()方法。

它将保留flash消息内容以供进一步操作。 https://api.rubyonrails.org/v5.1.7/classes/ActionDispatch/Flash/FlashHash.html#method-i-keep

if payment_service.succeeded?
 flash.keep(:notice) = 'Your subscription was set up successfully!'
 json = { success: true, redirect_path: root_path }
end

推荐阅读