Как очистить Flash-объект Rails после ответа на Ajax-запрос?

Я делаю такие вещи для некоторых из моих действий контроллера:

def my_method

  flash[:notice] = "Success."

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

end

И это прекрасно работает, и флэш-оповещения и уведомления отображаются нормально. Но когда пользователь нажимает, чтобы перейти на другую страницу, флеш-сообщения появляются еще раз. Rails, видимо, не знает, что они использовались из-за того, как я с ними обращаюсь. Как убрать их после выполнения рендера выше?

2 ответа

Решение

В вашем application_controller.rb

after_filter :clear_xhr_flash


def clear_xhr_flash
  if request.xhr?
    # Also modify 'flash' to other attributes which you use in your common/flashes for js
    flash.discard
  end
end

Ответ Рахула может быть выражен более кратко в application_controller.rb или любой другой контроллер как:

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

Это использует в своих интересах ActionControllerОбработка лямбд и условных фильтров.

Для очистки всех вспышек используйте flash.clear вместо flash.discard

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

Ни один из этих ответов не работал для меня на рельсах 5.2. После звонка flash.discard у меня все еще было быстрое сообщение. Вместо этого мне пришлось позвонить flash[:notice] = nil

Другие вопросы по тегам