关于此问题有很多帖子(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 %>
每次都说'没有通知'。
我试过了:
before_filter
:notice =>
代替flash[:notice] =>
redirect_to :back
与flash[:notice] =>
答案 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