Rails,redirect_to后丢失flash

时间:2009-07-22 14:55:19

标签: ruby-on-rails

我无法弄清楚为什么我的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是另一个控制器和操作。

6 个答案:

答案 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到另一个资源