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)应该这样做.
很久以后编辑:另外,回想起来,如果你重定向那么多次,我强烈建议你做一些重构并通过在更高级别整合你的重定向逻辑来消除任何不必要的跳转,这样你的重定向是预先确定的,只发生一次,最多两次
小智 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)
| 归档时间: |
|
| 查看次数: |
20216 次 |
| 最近记录: |