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

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

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

在我看来,我有

  

但是没有出现flash消息。

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

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

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

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

一个位置很好的flash.keep(:notice)应该可以解决问题。

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

简单但有效:

修改ApplicationController

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

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

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

和写

控制器中的layout 'application'

在您的控制器中使用:

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

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

 <%= notice %>