20150425164647_remove_duplicate_tags.rb 648 Bytes
Newer Older
1
# rubocop:disable all
2
class RemoveDuplicateTags < ActiveRecord::Migration[4.2]
Valery Sizov's avatar
Valery Sizov committed
3 4
  def up
    select_all("SELECT name, COUNT(id) as cnt FROM tags GROUP BY name HAVING COUNT(id) > 1").each do |tag|
5 6
      tag_name = quote_string(tag["name"])
      duplicate_ids = select_all("SELECT id FROM tags WHERE name = '#{tag_name}'").map{|tag| tag["id"]}
Valery Sizov's avatar
Valery Sizov committed
7 8 9 10 11 12 13 14 15 16 17 18
      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