Как очистить 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