我的控制器中有以下内容:
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
确实有效。 第一个不起作用的原因是什么?
答案 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 %>