Rails redirect flash [:notice]持久存在,当不应该这样做时

问题描述 投票:0回答:1

我有一个带有redirect_to的按钮,该按钮运行我的控制器操作,这将为我的模型创建一个新行。第一次,它会正确创建它并重定向。重定向后,我会通过菜单进入上一页并重复相同的操作。单击按钮后,它会重定向到正确的页面(尚不应该...正在缓存?),然后显示我以前的Flash消息。所以它是重复的。我输入了一条调试器语句,以查看它在第二次运行中发生的位置-它实际上是在执行按钮操作之前发生的。运行其余代码后,它会使用相应的(第二)闪存正确地重定向(但由于它是过早重定向的,因此重定向到同一页)。如何摆脱多余的初始Flash消息?

这里是一张图片,显示我的意思:

enter image description here

如果您查看URL下方的蓝色加载栏,则表明该页面尚未加载(我使用debugger语句将其停止,如下所示)。但是,重定向和刷新已经发生,这是不应该发生的,因为预期的重定向和刷新将在涡轮链接完成页面加载之后发生。

初始链接:

<%= link_to create_wager_from_favorite_wager_path(favorite_wager), data: { confirm: 'Create this wager?' } do %>
  Create Wager
<% end %>

控制器动作:

def create_wager_from
  debugger
  # on second run through, the redirect and flash happens before I reach this point
  @favorite_wager = FavoriteWager.find(params[:id])
  @anchor = params[:anchor]

  set_member_statuses()
  result_message = @favorite_wager.create_wager_from_favorite(current_user)

  respond_to do |format|
      format.html { redirect_to my_wagers_path(:game => @favorite_wager.game), notice: "Wager created successfully!" }
  end
end

至此,它遵循标准路径,我99%确信其余代码无关紧要。

我已经尝试在加载带有按钮操作的页面时检查Flash参数,但是它是空的。所以我不确定是什么引起了这个问题。任何见解表示赞赏。

更新:更改为flash.now [:notice]使重复停止,但仅在按钮的第一次单击上显示闪光灯。然后它以后再也不会出现。刷新页面将允许重复出现该错误。

ruby-on-rails ruby-on-rails-5 turbolinks rails-flash
1个回答
0
投票

[阅读了Turbolinks之后,我确定这个问题的原因是turbolinks中称为“页面预览”的自然内置功能。在此位置,它将在服务器响应到达之前将先前缓存的页面显示为一种“预览”,从而产生页面已加载的错觉。

但是,在我的情况下,缓存的重定向页面在提供服务时即被缓存,这意味着闪存消息也被捕获到该缓存中。因此,第二次单击创建按钮时,它将用闪存加载缓存的页面,然后重定向为真实并再次刷新(如支持)。

所以这里的解决方案是禁用所有页面预览或b。禁用该特定链接的涡轮链接。我选择了b。因为它不会影响我的程序的其余部分,但代价是蓝色加载动作不再存在。这是下面的解决方案(非常简单):

之前:

<%= link_to create_wager_from_favorite_wager_path(fw, :anchor => anchor), data: { confirm: 'Create this wager?' }, class: "red-btn create-favorite-wager-btn" do %>
  Create Wager
<% end %>

之后:

<%= link_to create_wager_from_favorite_wager_path(fw, :anchor => anchor), data: { confirm: 'Create this wager?' }, "data-turbolinks": "false", class: "red-btn create-favorite-wager-btn" do %>
  Create Wager
<% end %>
© www.soinside.com 2019 - 2024. All rights reserved.