Vraag Rails 4: Flash-bericht blijft bestaan ​​voor de volgende paginaweergave


Ik gebruik de volgende code in mijn lay-out om twee soorten flitsberichten weer te geven:

    <% 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]) %>

Ze werken allebei prima, maar wanneer er een wordt geactiveerd, wordt deze nog steeds weergegeven voor één extra paginaweergave. Ik gebruik geen caching-edelstenen.

Waarom gebeurt dit? En hoe los ik het op?


21
2017-09-11 17:54


oorsprong


antwoorden:


Gebruik flash.now in plaats van flash.

De flash variabele is bedoeld om te worden gebruikt vóór een redirect, en het blijft op de resulterende pagina voor één verzoek. Dit betekent dat als we dat niet doen redirect, en in plaats daarvan eenvoudig render een pagina, de flash het bericht blijft bestaan ​​voor twee verzoeken: het verschijnt op de weergegeven pagina maar wacht nog steeds op een omleiding (d.w.z. een tweede verzoek), en dus zal het bericht opnieuw verschijnen als u op een koppeling klikt.

Om dit rare gedrag te voorkomen, gebruiken we bij het renderen in plaats van omleiden flash.now in plaats van flash.

De flash.now object wordt gebruikt voor weergave flash berichten op een weergegeven pagina. Volgens mijn veronderstelling, als je ooit een willekeurige vindt flash bericht waar u het niet verwacht, kunt u het oplossen door het te vervangen flash met flash.now.

Hoop dat het helpt :)


48
2017-09-11 17:59