29 votes

Rails 4 : Le message Flash persiste pour la prochaine vue de la page

J'utilise le code suivant dans ma mise en page pour afficher deux types de messages 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]) %>

Les deux fonctionnent bien, mais chaque fois que l'un d'eux est déclenché, il apparaît encore pour une page supplémentaire. Je n'utilise pas de gemmes de mise en cache.

Pourquoi cela se produit-il ? Et comment puis-je le réparer ?

66voto

Rajesh C O Points 2330

Utilisez flash.now au lieu de flash .

Le site flash est destinée à être utilisée avant un redirect et il persiste sur la page résultante pour une demande. Cela signifie que si nous ne redirect et, à la place, simplement render une page, le flash persistera pendant deux requêtes : il apparaît sur la page rendue mais attend toujours une redirection (c'est-à-dire une deuxième requête), et donc le message apparaîtra à nouveau si vous cliquez sur un lien.

Pour éviter ce comportement bizarre, lorsque nous effectuons le rendu plutôt que la redirection, nous utilisons flash.now au lieu de flash .

Le site flash.now est utilisé pour afficher flash sur une page rendue. Comme je l'ai supposé, si vous trouvez un message aléatoire flash là où vous ne l'attendez pas, vous pouvez le résoudre en remplaçant flash con flash.now .

J'espère que cela vous aidera :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X