Well, as you have thought, the Ruby on Rails people have solved this problem way before now. The solution is to wisely use flash.now[] and flash[]. Here are a few tips:
Use flash.now[] when you are flashing:
- on ajax requests
- before a call to render :action => :my_action, as often found in failure cases of create and update actions
- before a redirect_to, often found in the success cases of create and update actions
In general, use flash.now[] when you don't want to carry over the flash to the next http request and flash[] otherwise. The FlashHash class has more detail on this at the ruby on rails API page. Hope this helps you to get rid of those annoying and often embarrassing out-of-context flash messages!