1

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

我在想我可以让 Angular 对 rails 控制器执行 $http ping 操作,强制 rails 执行flash.clear(). 但这似乎不起作用。当我注销时,最后的设计消息仍然存在。

4

1 回答 1

1

我建议您清除应用程序控制器中的哈希,除非它是设计控制器,因此您不需要为此进行额外的 http rest 调用。这是你可以做的

在您的 application_controller.rb 添加过滤器之前清除闪存,除非它是一个设计控制器:

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 消息...如果用户成功登录并点击非设计控制器,那么flash 对象将被丢弃。对于 api 参考,请查看以下链接:http ://api.rubyonrails.org/classes/ActionDispatch/Flash/FlashHash.html和http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers

于 2013-11-13T20:23:58.417 回答