闪存通知在重定向时丢失,如何找出删除它的内容?

时间:2011-11-30 20:32:16

标签: ruby-on-rails ruby-on-rails-3

关于此问题有很多帖子(respond_with redirect with notice flash message not working Why is :notice not showing after redirect in Rails 3等等),我已阅读至少4篇但仍无法解决此问题。

我的网站有一部分可以让用户在创建帐户之前做一些事情。从UX的角度来看,我更喜欢这个。所以他们被允许做X和Y然后他们被重定向到“创建帐户”页面(使用Devise)。

重定向如下:

if userIsNew 
  ... stow information in a cookie to be retrieved later ...     
  redirect_to "/flash", flash[:notice]  
    => "Ok, we'll get right on that after you sign up (we need your email)." 
      and return # this has to be here, since I'm terminating the action early
end 

所以"/flash"是我用来测试它的普通页面。它没有做任何事情,没有自己的标记,只有来自application.html的基本html,它在正文中有这一行:

 <% if flash[:notice] %>
    <p><%= notice %></p>
 <% else %>
  No notice!
 <% end %>

每次都说'没有通知'。

我试过了:

  • 在flash.keep中添加静态控制器中的before_filter
  • 使用:notice =>代替flash[:notice] =>
  • 将通知放入cookie并将该文本从cookie中拉出并放入应用程序控制器的before_filter中的flash中
  • redirect_to :backflash[:notice] =>

4 个答案:

答案 0 :(得分:13)

要么是

flash[:notice] = 'blablabla'
redirect_to foo_url

redirect_to foo_url, notice: 'blablabla'

答案 1 :(得分:6)

我一直在与同样的问题作斗争一段时间,但这些帖子似乎都没有帮助。 事实证明 - 就像通常情况一样 - 问题出现在我的代码中。我确实有一个我忘了的“redirect_to”,它正在清除闪光灯。

即,我的“root_path”由StaticPagesController的home方法提供。 “home”正在进行一些检查,然后将您重定向到user_path。

在我的代码中,我有很多地方

 redirect_to root_path, :flash => {error: @error}

这些重定向从不显示闪存,因为我的隐藏“home”控制器服务于“root_path”正在进行另一次重定向以清除闪存。

因此,当我在“home”控制器方法

中添加“flash.keep”时,我的问题就解决了
  def home
    if current_user 
        @user = current_user
      flash.keep      
      redirect_to @user unless @user.no_role?
    end 
  end

答案 2 :(得分:6)

我正在覆盖ApplicationController#redirect_to来调用flash.keep,以便在重定向上保留所有消息,而无需在我的控制器操作中显式调用flash.keep。到目前为止运作良好。还没有一个场景可以保留不需要的消息。

class ApplicationController < ActionController::Base
  def redirect_to(*args)
    flash.keep
    super
  end
end

如果有任何情况下这不是一个好的解决方案,请告诉我。

答案 3 :(得分:1)

面对同样的问题,flash在任何重定向后都消失了,什么都没有帮助,然后,我发现它已经关闭了......

检查你的/config/application.rb:

config.middleware.delete ActionDispatch::Flash