Сообщение 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