Fix #4999: Unexpected error: ActiveRecord::RecordNotUnique sometimes appears when uploading posts

Fix two issues that could lead to duplicate errors when creating posts:

* Fix the submit button on the upload form to disable itself on submit, to prevent
  accidental double submit errors.

* Fix a race condition when checking for MD5 duplicates. MD5 uniqueness is checked on both
  the Rails level, with a uniqueness validation, and on the database level, with a unique
  index on the md5 column. Creating a post could fail with an ActiveRecord::RecordNotUnique
  error if the uniqueness validation in Rails passed, but the uniqueness constraint in the
  database failed. In this case, we catch the RecordNotUnique error and convert it to a
  Rails validation error so we can treat it like a normal validation failure.
This commit is contained in:
evazion
2022-02-07 18:42:24 -06:00
parent a5b92dc9e6
commit 345a222163
3 changed files with 12 additions and 2 deletions

View File

@@ -66,7 +66,7 @@ class PostsController < ApplicationController
def create
@upload_media_asset = UploadMediaAsset.find(params[:upload_media_asset_id])
@post = authorize Post.new_from_upload(@upload_media_asset.upload, @upload_media_asset.media_asset, **permitted_attributes(Post).to_h.symbolize_keys)
@post.save
@post.save_if_unique(:md5)
if @post.errors.none?
if @post.warnings.any?