我无法弄清楚为什么我的flash消息在redirect_to之后消失了。在我的视图中启动了调试器,flash变量完全为空。
flash
=> {}
结果与flash.now相同...如果我编辑某些东西并调用渲染,它的工作正常。
控制器:
def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = "Logged in"
redirect_to root_url
else
render :action => 'new'
end
end
应用程序布局:
- flash.each do |name, msg|
=content_tag :div, msg, :class => "flash_#{name}"
root_url是另一个控制器和操作。
答案 0 :(得分:24)
使用闪光讯息功能时,有两种显示信息的方式:
即时加载同一页面,并可在flash['foo']
flash.now['foo'] = "Hello world"
或重定向到另一个页面,可从flash['notice']
访问:
redirect_to root_url, notice: "Hello world"
ruby on rails指南网站是一个非常好的参考:
http://guides.rubyonrails.org/action_controller_overview.html#the-flash
答案 1 :(得分:7)
如果您使用双重定向(例如重定向到root,然后重定向到用户),则需要启用闪存。
def first_action
flash[:notice] = "Logged in"
redirect_to root_url
end
def second_redirect_action
redirect_to current_user, flash: flash
end
答案 2 :(得分:4)
这是render_component插件......它打破了rails 2.3.2。不管怎样,谢谢。
答案 3 :(得分:4)
我刚刚在Rails 4中遇到过这个问题,在我的脑子撞到电脑一段时间之后,我在Rails日志中注意到了这一点:Can't verify CSRF token authenticity
。
原来,我是通过一张没有CSRF令牌的表格提交的。令人惊讶的是,它仍然在调用我的控制器方法并仍在进行重定向,但这就是将所有内容都抛弃的原因。
在表单中添加CSRF令牌修复了它。
答案 4 :(得分:1)
如果您重定向到另一个动作,请使用闪光灯 如果你渲染到同一个动作,请使用flash.now
答案 5 :(得分:1)
由于我的路由,我的flash渲染不适用于root_url。我将root_url重定向到另一个页面,例如root:to =>重定向( '[SOME_OTHER_PAGE]')。而不是这个,我只使用redirect_to到另一个资源