Rails:Flash消息在读取/访问之前不会清除

时间:2017-08-28 17:49:58

标签: ruby ruby-on-rails-4 flash-message

我在其中一条路线

中设置了如下flash消息
def signup
   flash[:is_signup] = true
   ... redirect_to route1 : route2  // based on some logic, redirect accordingly
end

def route1
    // access flash[:is_signup]
    flash.discard(:is_signup)
    // do something 
end

如上所述,在设置了flash变量之后,我可以重定向到使用此flash变量的路由(route1)或者根本不关心这个flash变量的其他路由(route2)。

问题是,当我redirect to route2,然后继续关注我自己的事情,在这个过程中点击几个路线/动作,当我最终点击route1时,flash变量是还在那里。

我还没有在文档中看到任何内容,说它在阅读之前可用。是这样的吗?或者我做错了什么?

先谢谢

1 个答案:

答案 0 :(得分:0)

我也看到了这一点(第4.2.11条),并同意:没有文档表明应该访问Flash。

但是,如果我有一个页面设置flash[:blah] = 'applesauce'并在下一个请求时使用Flash(例如puts flash[:blah]),则该密钥在后续请求中不存在。如果我不这样做,它将在请求后一直徘徊,直到我击中检查闪光灯的那个。

我的解决方法是: 在application_controller.rb

class ApplicationController < ActionController::Base
  before_action :touch_flash
#...
  def touch_flash
    flash
  end
end

这种引用flash的行为似乎足以在请求结束时触发丢弃(但不会干扰请求中稍后的任何实际访问)。下一个请求已按预期完成。