带有redirect_to的Flash通知在rails中被破坏

时间:2010-10-26 01:09:58

标签: ruby-on-rails ruby

我更新到Rails 2.3.10,Rack 1.2.1,现在我的flash消息都没有出现。我发现在重定向期间,通知会像这样传递

redirect_to(@user, :notice => "Sorry there was an error")

在我看来,flash哈希是空的

<%= debug flash %>  
!map:ActionController::Flash::FlashHash {} 

但您可以在控制器中看到该消息。提供什么?

        <%= debug controller.session %>
        session{:home_zip=>"94108", :session_id=>"xxx", :flash=>{:notice=>"Sorry there was an error"}, :user_credentials=>"1baf9c9c0423ce0151ec32e24cc422f07309e4ba503eb4830635ecc115da217809997324374bb273b3fb792895c9741a8b8c9ea4267771a1bd149de5b9179ea0", :user_credentials_id=>22, :home_market_id=>11}
        Edit Profile    

4 个答案:

答案 0 :(得分:4)

您是否检查了导轨错误跟踪器?我仍然使用老式的setter flash[:notice] = message,它工作正常,所以它似乎是一个redirect_to方法问题。

https://rails.lighthouseapp.com/

您是否尝试redirect_to url, :flash => { :notice => "notice" }作为解决方法?

答案 1 :(得分:4)

以下代码应该有效:

redirect_to(@user, {:notice => "Sorry there was an error"})

我猜这是由于Ruby中的更改而不是Rails中的更改,因为它看起来像编译器中的令牌解析优先级更改。

答案 2 :(得分:1)

我们也碰到了这个。我们所有的Flash消息都会通过重定向消失,但不会在控制器中明确设置时消失。

不起作用:

  def create
    if @obj.save
      flash[:notice] = "The #{cname.humanize.downcase} has been created."
      redirect_back_or_default redirect_url
    else
      render :action => 'new'
    end
  end

这确实有效:

 def show
    @user = current_user
    flash[:notice] = "Hello -- this will show up fine"
  end

答案 3 :(得分:1)

这可能是cookie的问题。长话短说,如果你之后立即重定向,cookie就不会得到。假设Rails使用cookie实现flash,重定向就是你的问题。

来源:

http://persistall.com/archive/2008/01/25/cookies--redirects--nightmares.aspx http://stackoverflow.com/questions/1621499/why-cant-i-set-a-cookie-and-redirect