Chat-Upload-Fehler

Es hat eine Weile gedauert, bis ich das durchforstet habe, aber ich glaube, ich habe die Ursache gefunden. Ich glaube, es hat mit diesem Code zu tun:

def fetch_uploads(params:, guardian:)
  return [] if !SiteSetting.chat_allow_uploads
  guardian.user.uploads.where(id: params.upload_ids) # Speziell hier
end

Wenn eine neue Chat-Nachricht erstellt wird, wird diese aufgerufen, um die Uploads abzurufen, die an die Nachricht angehängt werden sollen. Möglicherweise, um die Eigentümerschaft sicherzustellen, durchläuft die Methode den Benutzer des Guardian, um die Uploads abzurufen, damit nur Uploads zugelassen werden, die diesem Benutzer gehören.
Das Problem ist, dass Uploads dedupliziert werden, wie hier zu sehen ist (hier):

# Haben wir diesen Upload bereits?
@upload = Upload.find_by(sha1: sha1)

# ...

# Gib den vorherigen Upload zurück, falls vorhanden
if @upload
  add_metadata!
  UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
  return @upload
end

Ich glaube, dass eine mögliche Lösung darin besteht, die UserUploads zu durchlaufen, anstatt nur die Uploads zu berücksichtigen, die dem Benutzer gehören. UserUpload verknüpft Uploads mit mehreren Benutzern, was anscheinend das ist, was wir brauchen. Ich bin mir noch nicht zu 100 % sicher, wie ich es richtig machen kann; es wird spät, also werde ich mich ins Bett legen, aber wenn niemand anderes es behebt, werde ich versuchen, später zurückzukommen und an einem PR zu arbeiten. :slightly_smiling_face:

3 „Gefällt mir“