diff --git a/db/migrate/20110330175950_tag_uniqueness.rb b/db/migrate/20110330175950_tag_uniqueness.rb index df2c676918f6ac558777212efadac9c038e83bc8..bd4a4cd5571233baa88fdf5eac4a7434344a975e 100644 --- a/db/migrate/20110330175950_tag_uniqueness.rb +++ b/db/migrate/20110330175950_tag_uniqueness.rb @@ -1,17 +1,18 @@ class TagUniqueness < ActiveRecord::Migration def self.delete_duplicate_taggings duplicate_rows = execute <<SQL - SELECT COUNT(t.taggable_id), t.taggable_id, t.taggable_type, t.tag_id + SELECT COUNT(t.taggable_id), t.taggable_id, t.taggable_type, t.tag_id FROM taggings AS t GROUP BY t.taggable_id, t.taggable_type, t.tag_id HAVING COUNT(*)>1; SQL duplicate_rows.each do |row| execute <<SQL DELETE FROM taggings - WHERE taggings.taggable_id = #{row[1]} AND taggings.taggable_type = #{row[2]} AND taggings.tag_id = #{row[3]} + WHERE taggings.taggable_id = #{row[1]} AND taggings.taggable_type = '#{row[2]}' AND taggings.tag_id = #{row[3]} LIMIT #{row[0]-1} SQL end + end def self.up delete_duplicate_taggings add_index :taggings, [:taggable_id, :taggable_type, :tag_id], :unique => true, :name => 'index_taggings_uniquely' diff --git a/db/schema.rb b/db/schema.rb index f2d99acedd9b63925caaa5a736945213297fc6c0..578cee0b6e343fdce0ce1854a4228ce1d8d2aa13 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -328,8 +328,8 @@ ActiveRecord::Schema.define(:version => 20110330175950) do end add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" - add_index "taggings", ["taggable_id", "taggable_type", "context", "tag_id"], :name => "index_taggings_uniquely", :unique => true add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context" + add_index "taggings", ["taggable_id", "taggable_type", "tag_id"], :name => "index_taggings_uniquely", :unique => true create_table "tags", :force => true do |t| t.string "name"