Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I clear out the Rails flash object after responding to an Ajax request?

I am doing this type of thing for some of my controller actions:

def my_method

  flash[:notice] = "Success."

  respond_to do |format|
    format.js { render 'common/flashes' }
  end

end

And it works great, and the flash alerts and notices show up fine. But when the user clicks to go to another page, the flash messages show up one more time. Rails apparently doesn't know that they were used because of the way I'm handling them. How do I clear them out after doing the render above?

like image 953
AKWF Avatar asked Mar 18 '13 17:03

AKWF


3 Answers

Rahul's answer can be expressed more succinctly in application_controller.rb or any other controller as:

after_action -> { flash.discard }, if: -> { request.xhr? }

This takes advantage of ActionController's handling of lambdas and conditional filters.

like image 73
Mike Jarema Avatar answered Oct 19 '22 22:10

Mike Jarema


For cleaning all flashes use flash.clear instead of flash.discard

https://api.rubyonrails.org/v5.1.7/classes/ActionDispatch/Flash/FlashHash.html#method-i-clear

like image 9
Андрій Душар Avatar answered Oct 20 '22 00:10

Андрій Душар


Neither of these answers worked for me on rails 5.2. After calling flash.discard i still had a flash message. Instead I had to call flash[:notice] = nil

like image 6
stackPusher Avatar answered Oct 19 '22 22:10

stackPusher