discourse/db/migrate/20190424065841_add_post_image_indexes.rb
Sam Saffron 8d697bbbd3 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.
2019-04-24 17:21:42 +10:00

25 lines
580 B
Ruby

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