Acabo de hacer que una lista de restaurantes se pueda ordenar por nº de
visitas:
El nº de visitas se actualiza en cada visita, en el show:
@producto.update_attribute(‘veces_visto’, 1 + (@producto.veces_visto ||
0))
Pero el problema es que mientras se está actualizando, que es algo
bastante frecuente, se produce un bloqueo, y si se intenta acceder justo
en ese instante dará un error 500. De hecho, es fácil hasta provocarlo
uno mismo: basta con entrar en uno de los restaurantes con más visitas:
Le das a recargar (F5) quince veces seguidas, rápido, y te vas enseguida
a la lista ordenada por visitas… y enseguida tienes un error 500
Para tratar de solucionarlo, he intentado hacer que la actualización se
haga retrasada:
spawn do
@producto.update_attribute(‘veces_visto’, 1 + (@producto.veces_visto
|| 0))
end
Pero lo único que consigo es que el error 500 se produzca un poco
después… pero producirse, se produce igualmente.
¿Alguien se ha encontrado con este tipo de problemas? ¿Cómo pueden
solucionarse los conflictos de bloqueo, para campos que se actualizan
con mucha frecuencia?
PD: Y si encima se va a las últimas páginas, las probabilidades de
bloqueo se multiplican, pues MySQL recorre todos los registros hasta
llegar a los solicitados, y si alguno de los intermedios está
bloqueado… E500.
s2