チャットアップロードバグ

この原因を突き止めるのに時間がかかりましたが、原因がわかったと思います。それは、このコードに関連していると思います。

def fetch_uploads(params:, guardian:)
  return [] if !SiteSetting.chat_allow_uploads
  guardian.user.uploads.where(id: params.upload_ids) # 具体的にはここ
end

新しいチャットメッセージが作成されると、メッセージに添付するアップロードを取得するためにこれが呼び出されます。おそらく所有権を確認するために、メソッドは Guardian のユーザーを通じてアップロードを取得し、そのユーザーに属するアップロードのみを許可するようにします。

問題は、こちらで見られるように、アップロードが重複排除されていることです。

# そのアップロードはすでにありますか?
@upload = Upload.find_by(sha1: sha1)

# ...

# 存在する場合は前のアップロードを返します
if @upload
  add_metadata!
  UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
  return @upload
end

可能な修正策は、ユーザーに属するアップロードのみを考慮するのではなく、UserUpload を介して取得することだと思います。UserUpload はアップロードを複数のユーザーにリンクしており、それが私たちが必要としているもののようです。まだ完全に確信はありませんが、もう遅いので寝ます。もし他の人が修正しなければ、後で戻って PR を作成しようと思います。:slightly_smiling_face:

「いいね!」 3