【问题标题】:How to force Rails to abandon flash messages when transitioning to Angularjs?转换到 Angularjs 时如何强制 Rails 放弃 Flash 消息?
【发布时间】:2013-11-26 14:56:49
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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 消息...如果用户成功登录并点击非设计控制器,则闪存对象将被丢弃。 api参考请看以下链接:http://api.rubyonrails.org/classes/ActionDispatch/Flash/FlashHash.htmlhttp://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers

    【讨论】:

    • 我会接受这个答案,因为它回答了如何丢弃闪存的问题,即使关于“除非设计控制器”的部分并不是我真正想要的。保留设计闪存消息会产生意想不到的后果:登录一次,打开另一个选项卡,再次登录。然后注销。当重定向到设计闪存时,当我刚刚注销时,它会说“您已经登录”。我所做的只是将 devise.en.yml 编辑为空字符串,以便在我不希望它们弹出时弹出消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2020-09-08
    相关资源
    最近更新 更多