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

che*_*ell 28 ruby-on-rails ruby-on-rails-3

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

redirect_to signin_path, :notice => "The email is already registered"
Run Code Online (Sandbox Code Playgroud)

在我看来,我有

<%= flash[:notice] if flash[:notice] %>
Run Code Online (Sandbox Code Playgroud)

但是没有出现flash消息.

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

flash[:notice] = "There is already an acount for this email. Please Login to create your board."
redirect_to signin_path
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*lin 37

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

一个有条不紊的人flash.keep(:notice)应该这样做.

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

  • 检查[here](http://guides.rubyonrails.org/action_controller_overview.html)以获取有关此指南的rails指南说明.`flash.keep`应该转到中间控制器.也就是说,如果你有'apples redirect_to tree,redirects_to ground`,它应该进入`tree`controller动作,第二次重定向发生 (2认同)

小智 6

简单但有效:

修改ApplicationController <ActionController :: Base,如下所示:

alias :std_redirect_to :redirect_to
def redirect_to(*args)
   flash.keep
   std_redirect_to *args
end
Run Code Online (Sandbox Code Playgroud)