Сообщение Rails flash остается для двух загрузок страниц

Я использую флеш-уведомление в приложении Rails со следующим кодом:

flash[:notice] = "Sorry, we weren't able to log you in with those details."
render :action => :new

Флэш-сообщение отображается как ожидаемое в действии "новое", но затем оно также отображается на следующей странице, которую посещает пользователь (что бы это ни было). Он должен показывать только один раз, но что-то заставляет его придерживаться.

Ответ 1

Существует два способа решения этой проблемы:

Один из них - использовать

flash.now[:notice]

когда ваша вспышка должна быть отброшена в конце текущего запроса и не предназначена для использования после перенаправления.

Второй - позвонить

flash.discard(:notice)

в конце запроса.

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

Если вы действительно создаете флеш-память на самом экране, используйте flash.now.

Ознакомьтесь с документацией API Ruby on Rails, чтобы узнать, как работает хэш Flash.

Ответ 2

Хорошо, я решил это. Способ обойти это:

flash.now[:notice] = "Sorry, we weren't able to log you in with those details."
render :action => :new

Ключевая часть - flash.now [: notice] вместо flash [: notice].

Ответ 3

Или вы можете просто вызвать действие, подобное этому

flash.now[:notice] = "Sorry, we weren't able to log you in with those details."
render 'new' #or render :new