多くのインポーターにおけるUploadReferenceのバグ

先週、クライアントから、移行から1週間後に、投稿の最後の画像のみが表示されているという連絡がありました。調査したところ、問題が見つかりました。

昨年、PostUploadUploadReference に変更され、コミット https://github.com/discourse/discourse/commit/8a5d97ef3f6f2d29a4e58b325f15b325c7d62986#diff-07ef93e0c499f6a6d5ce34607cb06a82ca03785d099391db9ea44bff30279727 で、多くのインポーターが PostUpload の代わりに UploadReference を使用するように変更されました。

ほとんどのインポーターで見つかったパターンは次のとおりです。

def import_attachments
  # ... アップロードとその投稿を取得
  uploads.each do |upl|
    # ... ファイルをアップロード
    # ... 対応する投稿を検索
    UploadReference.ensure_exist!(upload_ids: [upload.id], target: post)
  end
end

これは、一見すると良さそうに見えます。

しかし、UploadReference.ensure_exist! は、その投稿に対する他のアップロード参照が存在しないことも確認します。

したがって、1つの投稿に対して UploadReference.ensure_exist! を複数回使用すると、最後のアップロード参照のみが保持されます。

関数の名前からすると、これらの場所の呼び出しロジックをすべて書き直すのではなく、実際の Сахалин (実装) を変更する (delete_all を削除する) のが最善ではないでしょうか?

@david @nbianca

「いいね!」 3