Non faccio uso di Rails, ma questo è come ho fatto in Python usando 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')
Poi nel modello di base ho questo:
<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>
ti rompo esso down the Pythonically challenge:
- Quando si aggiunge un messaggio flash, si crea un ID univoco e lo si memorizza con quel messaggio.
- Prima di visualizzare il messaggio, si controlla se è stato impostato un cookie denominato con ID univoco del messaggio.
- Se il cookie non è stato impostato, inviare il messaggio e impostare il cookie. Scadere il cookie in un giorno o breve come pensi sia saggio.
Ora se questa pagina viene estratta dalla cache, andrà bene. Al passaggio 2 il test per il cookie passerà perché è già stato impostato e il messaggio non verrà visualizzato.
fonte
2010-07-10 10:07:15
Mi piace questa idea. Sembra che potrebbe essere il biglietto. – KJF
Penso che valga la pena notare che questo non realizzerà tutti i vantaggi del caching delle pagine, perché il processo Rails sarà comunque colpito ogni volta invece che non del tutto. Non riesco a pensare ad una soluzione migliore però. –
Il caching dei frammenti è meglio che servire una seconda richiesta HTTP che richiede solo dati che potrebbero essere inclusi nel primo. Questa strategia raddoppierà il numero di richieste HTTP che servi. –