Не выдавать бейджи пользователям, которых не существует?

Посмотрев на одну из наших страниц значков, я увидел

что заставило меня задуматься — что случилось со всеми этими аватарами?

Оказалось, что эти пользователи не существуют.

Нам, вероятно, не стоит выдавать значки пользователям, которых больше нет? Или, возможно, стоит запретить их отображение? В любом случае, они вытесняют аватары реальных пользователей — тех, кто нам действительно важен!

10 лайков

Хм… что-то здесь не так, потому что:

Модель grant уже присоединяется к user, поэтому ей откуда-то нужно брать user_id.

Интересно, не означает ли способ, которым это ограничено областью видимости, что dependent: :destroy работает некорректно.

В любом случае, мы можем добавить еженедельную очистку.

1 лайк

Учитывая, когда эти значки были выданы (на момент написания они были самыми свежими), я подозреваю, что они выдаются, когда учётная запись пользователя ещё не существует, а не когда учётная запись уже есть и затем не удаляется при удалении учётной записи.

Нужно будет проверить.

2 лайка

Это странно, потому что в строках есть идентификаторы пользователей. Если пользователь удален, то негде взять эти идентификаторы.

3 лайка

Полагаю, идентификаторы пользователей хранятся в таблице incoming_links. Эти записи не уничтожаются каскадно, а запрос для значка «Поделиться» лишь защищает от того, чтобы user_id в таблице incoming_links был NULL:

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

Значок «Первый шар» (First Share) должен иметь аналогичную ошибку:

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

3 лайка

Я создал pull request, который объединяет эти запросы бейджей с таблицей пользователей — это мой первый pull request, так что надеюсь, я всё сделал правильно!

3 лайка