Why a Rails flash message is shown twice
You set a flash message and it shows up as it should. However, it is displayed again the next time you follow a link. Here is why:
You have to differentiate between a render
and a redirect_to
because a flash message is only deleted after a redirect. If you want a message to be seen in the next request after a redirect, use flash[]
. If you want a message to be seen in the current request, use flash.now[]
.
Workaround for the lazy
If you cannot be bothered to decide which flash hash to use, or if the flash is set by a piece of code outside your control, you can also change your layout displaying the flash so it deletes the flash message once displayed:
Copy- flash.slice(:notice, :message, :error, :success, :warning, :failure).each do |level, value| - if value.present? %div{:class => "flash #{h level}"} = h value - flash[level] = nil # set to nil in case the flash was set without a following redirect
Once an application no longer requires constant development, it needs periodic maintenance for stable and secure operation. makandra offers monthly maintenance contracts that let you focus on your business while we make sure the lights stay on.