Я показываю флеш-сообщения в моем приложении rails, используя javascript (по сути, каждое флеш-сообщение - это оверлейный div).
Следующий фрагмент включен в мой основной файл макета и заботится об отображении флеш-памяти.Я замечаю, что если я обновляю страницу, снова появляется одно и то же флэш-сообщение.В любом случае, чтобы избавиться от этого?Я знаю, что могу вызвать flash.discard, но не уверен, что это лучшее место для этого, и я не хочу, чтобы другой вызов контроллера просто сбрасывал флэш.
<% if !flash.nil? %>
<% if flash[:notice] %>
<script type="text/javascript">
//<![CDATA[
showFlash("<%= flash[:notice] %>", "flash-notice");
//]]>
</script>
<% end %>
<% if flash[:success] %>
<script type="text/javascript">
//<![CDATA[
showFlash("<%= flash[:success] %>", "flash-success");
//]]>
</script>
<% end %>
<% if flash[:error] %>
<script type="text/javascript">
//<![CDATA[
showFlash("<%= flash[:error] %>", "flash-error");
//]]>
</script>
<% end %>
<% end %>
function showFlash(msg, tp) {
if ($('#flash_messages_container').length > 0) {
flashAnimatedHide();
}
var flashContainer = $("<div id='flash_messages_container' class='flash-messages " + tp + " '></div>");
flashContainer.prepend("<div id='flash_messages_content'>" + msg + "<span class='go-right sprite close' id='close_flash'></span></div>");
$('body').prepend(flashContainer);
flashContainer.animate({
opacity : .1
}, '500', function(){
flashContainer.css('opacity', 1)
})
$('body').css('margin-top', flashContainer.outerHeight());
$('#close_flash').click(function() {
flashAnimatedHide();
$('body').css('margin-top', '0');
});
}
UPDATE
Я подозреваю, что это происходит, так как я начал использовать etags для кэширования на стороне cient и обратного прокси.Так что я думаю, что обновление - это просто загрузка кэшированной страницы, которая содержит флэш-сообщения во флэш-контейнере.Так как же люди сбрасывают флэш-память, когда включено кэширование?