目前我正在开发一个使用rails支持的纯angularjs单页面js应用程序的站点。唯一仍然使用rails视图的是登录,密码重置等的设计页面。一旦用户登录,我将它们转发到angularjs url。但是,当用户注销时,它们会返回到rails登录页面,在那里他们会看到非常陈旧的Flash消息。
我以为我可以让Angular对rails控制器执行$ http ping操作,这会强制rails执行flash.clear()
。但这似乎不起作用。当我退出时,最后一个设计消息仍在那里。
答案 0 :(得分:1)
我建议在你的应用程序控制器中清除hash,除非它是设计控制器,所以你不需要为此做额外的http rest调用。这是你可以做的
你的application_controller.rb中的在清除flash之前添加,除非它是一个设计控制器:
before_filter :discard_flash, :unless => :devise_controller?
private
def discard_flash
flash.discard # discard the entire flash at the end of the current action
flash.discard(:warning) # discard only the "warning" entry at the end of the current action
end
现在,当用户与您的应用程序进行交互时,如果Flash对象不是设备控制器,则会丢弃该对象,因此如果用户输入错误的密码,您仍将显示Flash消息...如果用户成功登录并且未点击设备控制器,然后闪存对象将被丢弃。有关API参考,请查看以下链接:http://api.rubyonrails.org/classes/ActionDispatch/Flash/FlashHash.html和http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers