Я не использую Rails, но вот как я это сделал в Python, используя UUID:
# set flash messages like this
def flash(self, title, body):
session['flash_messages'].append({
'title': title,
'body': body,
'uuid': uuid().hex # stores a UUID as a string
})
...
self.flash('foo', 'bar')
Тогда в базовом шаблоне у меня это:
<script type="text/javascript">
{% for m in session.flash_messages %}
if(!Cookies.get('{{m.uuid}}')) {
Notify('{{m.title}}', '{{m.body}}');
Cookie.set('{{m.uuid}}', 'true', 86400); // key, value, expiry seconds
}
{% endfor %}
</script>
Я разобью это для Python-оспариваемых:
- Когда вы добавляете флэш-сообщение, вы создаете уникальный идентификатор и сохраняете его вместе с этим сообщением.
- Перед отображением сообщения вы проверяете, установлен ли файл cookie с уникальным идентификатором сообщения.
- Если этот файл cookie не был установлен, высветите сообщение и установите файл cookie. Срок действия файла cookie истекает через день или настолько коротким, насколько вы думаете.
Теперь, если эта страница будет извлечена из кэша, все будет в порядке. На шаге 2 тест для cookie пройдет, потому что он уже был установлен, и сообщение не будет отображаться.