Commit 708b5073 authored by Valery Sizov's avatar Valery Sizov Committed by Dmitriy Zaporozhets

Merge branch 'tag_dup' into 'master'

Remove tag duplicates

Prevention of getting this error:

```
ActiveRecord::RecordNotUnique: PG::Error: ERROR:  could not create unique index "index_tags_on_name"
DETAIL:  Key (name)=(XSS') is duplicated.
: CREATE UNIQUE INDEX  "index_tags_on_name" ON "tags"  ("name")
```

This migration fails if there are duplicates:
https://github.com/mbleigh/acts-as-taggable-on/blob/v3.5.0/db/migrate/2_add_missing_unique_indices.rb#L3

See merge request !623
parent 87dd2dca
class RemoveDuplicateTags < ActiveRecord::Migration
def up
select_all("SELECT name, COUNT(id) as cnt FROM tags GROUP BY name HAVING COUNT(id) > 1").each do |tag|
duplicate_ids = select_all("SELECT id FROM tags WHERE name = '#{tag["name"]}'").map{|tag| tag["id"]}
origin_tag_id = duplicate_ids.first
duplicate_ids.delete origin_tag_id
execute("UPDATE taggings SET tag_id = #{origin_tag_id} WHERE tag_id IN(#{duplicate_ids.join(",")})")
execute("DELETE FROM tags WHERE id IN(#{duplicate_ids.join(",")})")
end
end
def down
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment