¿No otorgar insignias a usuarios que no existen?

Al observar una de nuestras páginas de insignias, veo:

lo que me despertó la curiosidad: ¿qué pasó con todos esos avatares?

Resulta que esos usuarios no existen.

Probablemente no deberíamos otorgar insignias a usuarios que ya no existen, ¿o quizás deberíamos evitar que se muestren? De todos modos, están desplazando los avatares de los usuarios reales ¡aquellos que nos importan!

10 Me gusta

Hmm… algo no parece correcto aquí, porque:

El grant ya está haciendo un join con el usuario; debe estar obteniendo el ID del usuario desde algún lugar.

Me pregunto si la forma en que está scoped significa que el dependent: :destroy no está funcionando correctamente.

En cualquier caso, podemos agregar una limpieza semanal.

1 me gusta

Dado cuándo se otorgaron estas insignias (al momento de escribir esto, eran las más recientes), sospecho que se otorgan cuando la cuenta de usuario no existe, en lugar de otorgarse cuando la cuenta existe y luego no eliminarse al borrar la cuenta.

Tendré que verificarlo.

2 Me gusta

Es extraño porque las filas tienen IDs de usuario; si el usuario es eliminado, no hay de dónde obtener esos IDs.

3 Me gusta

Creo que los IDs de usuario residen en la tabla incoming_links. Esos registros no se destruyen de forma dependiente, y la consulta de la insignia de compartir solo protege contra el hecho de que user_id sea nulo en la tabla incoming_links:

https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L199

La insignia First Share debería tener un error similar:

https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L64

3 Me gusta

¡He creado una solicitud de extracción que une esas consultas de insignias a la tabla de usuarios; mi primera solicitud de extracción, así que espero haberlo hecho todo bien!

3 Me gusta