FIX: ensure image tracking custom fields have no dupes

All these columns must never include duplicates for a single post
otherwise code breaks. All are defined in post.rb in the top in constants
but we usually prefer not to ref constants in case they change and migration
becomes inconsistent.
This commit is contained in:
Sam Saffron 2019-04-24 17:21:29 +10:00
parent 8673bd832a
commit 8d697bbbd3

View File

@ -0,0 +1,24 @@
class AddPostImageIndexes < ActiveRecord::Migration[5.2]
def change
%w{
large_images
broken_images
downloaded_images
}.each do |field|
execute <<~SQL
DELETE FROM post_custom_fields f
WHERE name = '#{field}' AND id > (
SELECT MIN(f2.id) FROM post_custom_fields f2
WHERE f2.post_id = f.post_id AND f2.name = f.name
)
SQL
add_index :post_custom_fields, [:post_id],
name: "post_custom_field_#{field}_idx",
unique: true,
where: "name = '#{field}'"
end
end
end