Forum: Ruby on Rails Flash notices are not accessible on next request

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2f030c2a9e4e1e165a0cb360805951f3?d=identicon&s=25 Tom Hoen (hoenth)
on 2009-04-29 21:29
For some reason, which I cannot detect, no flash notices that I set
prior to redirects are available after the redirect.

This standard "forgot password" action as an example:

 def forgot
    if request.post?
      user = User.find_by_email(params[:user][:email])
      if user
        user.create_reset_code
        flash[:notice] = "A reset email was sent to #{user.email}"
        redirect_back_or_default('/')
      else
         flash[:notice] = "The email #{params[:user][:email]} does not
exist in system"
         redirect_to forgot_path
      end
    end
  end

If I enter a bad email address, the forgot action/view should redisplay
with the flash message. Up until a little while ago, it did. Something
changed, but I am not sure what it is. Flash messages that are set
before renders do display (my layouts contain the display of the flash
message, so are available on most every page).

Using the debugger, I have verified that just after the flash[:notice]
statement, the flash hash is set correctly. But when processing returns
to the forgot method after the redirect, the flash hash is empty. So it
seems that the message is not making to the session, or is not being
restored from the session.

Sessions are working properly otherwise.

Any thoughts would be greatly appreciated.
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2009-04-30 00:41
Tom Hoen wrote:
> Any thoughts would be greatly appreciated.

Ok, total beginner here.  As far as I know, the flash is only available
to the next request after the current request, and then it's
automatically deleted.  So if your flash is empty, there must have been
two requests since you set the flash.   A redirect causes the browser to
issue a new request.  Is there a second redirect in your code somewhere?
2f030c2a9e4e1e165a0cb360805951f3?d=identicon&s=25 Tom Hoen (hoenth)
on 2009-04-30 02:52
7stud -- wrote:

> Is there a second redirect in your code somewhere?

That is a good thought. I was thinking along the same lines, so checked
the console after issuing a request that should end with a displayed
flash message and saw that there was only a single redirect. I also
tried adding "keep" to the flash set statement, but alas, no message
appeared.

I am really stumped on this one.
85f8b7bbe07bff22e0b38cca818cf692?d=identicon&s=25 Luke Pearce (kule)
on 2009-05-08 13:41
Tom Hoen wrote:
> 7stud -- wrote:
>
>> Is there a second redirect in your code somewhere?
>
> That is a good thought. I was thinking along the same lines, so checked
> the console after issuing a request that should end with a displayed
> flash message and saw that there was only a single redirect. I also
> tried adding "keep" to the flash set statement, but alas, no message
> appeared.
>
> I am really stumped on this one.

I had the same issue - it was because of the render_component plugin.
Take that out and everything worked properly.

However this might be something worth looking at too:
https://rails.lighthouseapp.com/projects/8994/tick...

Ta
Luke
2f030c2a9e4e1e165a0cb360805951f3?d=identicon&s=25 Tom Hoen (hoenth)
on 2009-05-12 03:58
Luke Pearce wrote:

>
> I had the same issue - it was because of the render_component plugin.
> Take that out and everything worked properly.
>
> However this might be something worth looking at too:
> https://rails.lighthouseapp.com/projects/8994/tick...
>

Luke - Thanks for responding. I use embedded Active Scaffolds, so need
to have render component installed. I commented out a line that called
flash.sweep:

     def assign_shortcuts_with_render_component(request, response)
        assign_shortcuts_without_render_component(request, response)
        flash(:refresh)
        #flash.sweep if @_session && !component_request?
      end

which seems to make things work without breaking others, but I can't be
too sure. I sent a message to the author of render_component and have
not heard whether this is a bad thing to do.

Tom
85f8b7bbe07bff22e0b38cca818cf692?d=identicon&s=25 Luke Pearce (kule)
on 2009-05-12 10:28
Tom Hoen wrote:

> Luke - Thanks for responding. I use embedded Active Scaffolds, so need
> to have render component installed. I commented out a line that called
> flash.sweep:

Thanks very much for this Tom.  We're using ActiveScaffold too so this
is really useful; let us know if you get a reply about it.


Cheers
Luke
This topic is locked and can not be replied to.