Подтвердить что ты не робот

Rails 4: Flash-сообщение сохраняется для просмотра следующей страницы

Я использую следующий код в своем макете для отображения двух типов флеш-сообщений:

    <% if !flash[:notice].nil? %>
    <div class="row">
        <div class="flash notice col-xs-12">
            <%= flash[:notice] %>
        </div>
    </div>
    <% end %>
    <% if !flash[:error].nil? %>
    <div class="row">
        <div class="flash error col-xs-12">
            <%= flash[:error] %>
        </div>
    </div>
    <% end %>

    <%= debug(flash[:notice]) %>
    <%= debug(flash[:error]) %>

Оба они работают нормально, но всякий раз, когда он запускается, он все равно будет отображаться для одного дополнительного просмотра страницы. Я не использую кеширующие камни.

Почему это происходит? И как это исправить?

4b9b3361

Ответ 1

Используйте flash.now вместо flash.

Переменная flash предназначена для использования до redirect, и она сохраняется на результирующей странице для одного запроса. Это означает, что если мы не делаем redirect и вместо этого просто render страницу, сообщение flash будет сохраняться для двух запросов: оно появляется на отображаемой странице, но все еще ожидает перенаправления (то есть второго запроса), и, таким образом, сообщение появится снова, если вы нажмете ссылку.

Чтобы избежать этого странного поведения, при рендеринге вместо перенаправления мы используем flash.now вместо flash.

Объект flash.now используется для отображения сообщений flash на отображаемой странице. Согласно моему предположению, если вы когда-либо находите случайное сообщение flash, в котором вы его не ожидаете, вы можете его решить, заменив flash на flash.now.

Надеюсь, что помогает:)