No consumo rieles pero esto es cómo lo hice en Python usando los 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')
Luego, en la plantilla base tengo esto:
<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>
Me vas a romper abajo para desafiado-Pythonically:
- al agregar un mensaje flash, se crea un identificador único y lo almacenan con ese mensaje.
- Antes de mostrar el mensaje, verifica si se ha configurado una cookie con el ID único del mensaje.
- Si esa cookie no se ha configurado, muestre el mensaje y configure la cookie. Vende la galleta en un día, o tan breve como creas que es prudente.
Ahora, si esta página se extrae de la memoria caché, estará bien. En el paso 2, la prueba de la cookie pasará porque ya se ha configurado y el mensaje no se mostrará.
Me gusta esta idea. Parece que podría ser el boleto. – KJF
Creo que vale la pena señalar que esto no aprovechará todos los beneficios del almacenamiento en caché de la página, ya que el proceso de Rails seguirá siendo golpeado cada vez en lugar de no hacerlo en absoluto. Sin embargo, no puedo pensar en una mejor solución. –
El almacenamiento en caché de fragmentos es mejor que servir una segunda solicitud HTTP que solo solicita datos que podrían incluirse en el primero. Esta estrategia duplicaría la cantidad de solicitudes HTTP que usted presta. –