I updated to Rails 2.3.10, Rack 1.2.1 and now none of my flash messages are showing up. I found that during a redirect the notice is passed in like this
redirect_to(@user, :notice => "Sorry there was an error")
And in my view the flash hash is empty
<%= debug flash %>
!map:ActionController::Flash::FlashHash {}
But you can see the message in the controller. What gives?
<%= 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
Did you check the rails bug tracker? I still use the old fashioned setter flash[:notice] = message
and it works fine, so it seems to be a redirect_to method problem.
https://rails.lighthouseapp.com/
Did you try redirect_to url, :flash => { :notice => "notice" }
, as a work around?
The code below should work:
redirect_to(@user, {:notice => "Sorry there was an error"})
I'm guessing this is due to changes in Ruby and not in Rails, because it looks like a token parsing priority change in the compiler.
We just ran into this too. All our flash messages disappear with redirect, but not when set in the controller explicitly.
Does not work:
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
This does work:
def show
@user = current_user
flash[:notice] = "Hello -- this will show up fine"
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With