如何在转换到Angularjs时强制Rails放弃flash消息?

时间:2013-11-13 20:14:12

标签: ruby-on-rails angularjs devise rails-flash

目前我正在开发一个使用rails支持的纯angularjs单页面js应用程序的站点。唯一仍然使用rails视图的是登录,密码重置等的设计页面。一旦用户登录,我将它们转发到angularjs url。但是,当用户注销时,它们会返回到rails登录页面,在那里他们会看到非常陈旧的Flash消息。

我以为我可以让Angular对rails控制器执行$ http ping操作,这会强制rails执行flash.clear()。但这似乎不起作用。当我退出时,最后一个设计消息仍在那里。

1 个答案:

答案 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.htmlhttp://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers