许多导入器中的UploadReference错误

上周,一位客户联系我们,称在他们进行迁移一周后,只有每篇帖子的最后一张图片仍然显示。我们对此进行了调查,发现了一个问题。

去年,PostUpload 更改为 UploadReference,在提交 https://github.com/discourse/discourse/commit/8a5d97ef3f6f2d29a4e58b325f15b325c7d62986#diff-07ef93e0c499f6a6d5ce34607cb06a82ca03785d099391db9ea44bff30279727 中,许多导入器被更改为使用 UploadReference 而不是 PostUpload

在大多数导入器中发现的模式是

def import_attachments
  # ... 获取上传和它们的帖子
  uploads.each do |upl|
    # ... 上传文件
    # ... 查找对应的帖子
    UploadReference.ensure_exist!(upload_ids: [upload.id], target: post)
  end
end

似乎很好。

然而,UploadReference.ensure_exist! 还会确保该帖子不存在其他上传引用。

因此,对单个帖子多次使用 UploadReference.ensure_exist! 将只保留最后一个上传引用。

考虑到函数名称,最好更改实际实现(删除 delete_all),而不是重写所有这些地方的调用逻辑?

@david @nbianca

3 个赞