我在其中一条路线
中设置了如下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变量是还在那里。
我还没有在文档中看到任何内容,说它在阅读之前可用。是这样的吗?或者我做错了什么?
先谢谢
答案 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的行为似乎足以在请求结束时触发丢弃(但不会干扰请求中稍后的任何实际访问)。下一个请求已按预期完成。