diff --git a/app/logical/post_replacement_processor.rb b/app/logical/post_replacement_processor.rb index 4c0743770..3891f2256 100644 --- a/app/logical/post_replacement_processor.rb +++ b/app/logical/post_replacement_processor.rb @@ -36,6 +36,7 @@ class PostReplacementProcessor replacement.image_height = media_asset.image_height replacement.image_width = media_asset.image_width replacement.md5 = media_asset.md5 + replacement.media_asset = media_asset post.lock! post.md5 = media_asset.md5 diff --git a/app/models/post_replacement.rb b/app/models/post_replacement.rb index 0fa35736a..1545cff10 100644 --- a/app/models/post_replacement.rb +++ b/app/models/post_replacement.rb @@ -3,6 +3,8 @@ class PostReplacement < ApplicationRecord belongs_to :post belongs_to :creator, class_name: "User" + belongs_to :media_asset, optional: true + belongs_to :old_media_asset, optional: true, class_name: "MediaAsset" before_validation :initialize_fields, on: :create before_create :process! @@ -17,6 +19,7 @@ class PostReplacement < ApplicationRecord self.old_image_width = post.image_width self.old_image_height = post.image_height self.old_md5 = post.md5 + self.old_media_asset = post.media_asset end concerning :Search do diff --git a/script/fixes/128_backfill_replacement_media_asset_ids.rb b/script/fixes/128_backfill_replacement_media_asset_ids.rb new file mode 100755 index 000000000..88f5a3f03 --- /dev/null +++ b/script/fixes/128_backfill_replacement_media_asset_ids.rb @@ -0,0 +1,21 @@ +#!/usr/bin/env ruby + +require_relative "base" + +with_confirmation do + fix = ENV.fetch("FIX", "false").truthy? + cond = ENV.fetch("COND", "TRUE") + + replacements = PostReplacement.where("(media_asset_id IS NULL AND md5 IS NOT NULL) OR (old_media_asset_id IS NULL AND old_md5 IS NOT NULL)").where(cond) + + replacements.find_each do |replacement| + new_media_asset = MediaAsset.active.find_by(md5: replacement.md5) + old_media_asset = MediaAsset.active.find_by(md5: replacement.old_md5) + + replacement.media_asset = new_media_asset if replacement.media_asset.nil? + replacement.old_media_asset = old_media_asset if replacement.old_media_asset.nil? + + puts ({ replacement: replacement.id, md5: replacement.md5, old_md5: replacement.old_md5, changes: replacement.changes, }).to_json + replacement.save!(touch: false) if fix && replacement.changed? + end +end