聊天上传错误

我花了一些时间才弄清楚这一点,但我想我找到了原因。我认为这与此代码有关:

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 将上传文件链接到多个用户,这似乎是我们需要的。我还不能 100% 确定如何正确地做到这一点;时间不早了,我要去睡了,但如果其他人没有修复它,我稍后会回来尝试做一个 PR。:slightly_smiling_face:

3 个赞