重定向中的Flash消息无法正常工作

时间:2011-09-15 06:08:14

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

我的控制器中有以下内容:

redirect_to signin_path, :notice => "The email is already registered"

在我看来,我有

<%= flash[:notice] if flash[:notice] %>

但是没有出现flash消息。

但是,如果我在控制器中执行以下操作

flash[:notice] = "There is already an acount for this email. Please Login to create your board."
redirect_to signin_path

确实有效。 第一个不起作用的原因是什么?

4 个答案:

答案 0 :(得分:37)

在日志上进行一些拖尾操作,看看在渲染之前是否将您重定向到多个操作。如果你是,那么很可能闪存没有保持足够长的时间来进入最终渲染的视图。

有条不紊的flash.keep(:notice)应该可以解决这个问题。

很久以后编辑:另外,回想起来,如果你重定向那么多次,我强烈建议你做一些重构,通过在更高层次上整合重定向逻辑来消除任何不必要的跳转,这样你的重定向就是预定的,只发生一次,最多两次。

答案 1 :(得分:6)

简单但有效:

修改ApplicationController&lt; ActionController :: Base如下:

alias :std_redirect_to :redirect_to
def redirect_to(*args)
   flash.keep
   std_redirect_to *args
end

答案 2 :(得分:0)

最佳方法是在views / layouts / application.html.erb文件中写下这些行

<%= notice %>
<%= alert %>

并写

控制器中的

layout 'application'

答案 3 :(得分:0)

在您的控制器中使用:

redirect_to signin_path, :notice => "There is already an acount for this email. Please Login to create your board."

在您的应用程序布局中使用:

<%= notice %>