class PostVisibilitiesOnContacts < ActiveRecord::Migration class PostVisibility < ActiveRecord::Base; end def self.move_author_pvs_to_aspect_pvs where_clause = <1; SQL duplicate_rows.each do |row| count = row.first contact_id = row[1] post_id = row.last execute < false t.integer :aspect_id, :null => false t.timestamps end add_index :aspect_visibilities, [:post_id, :aspect_id], :unique => true add_index :aspect_visibilities, [:aspect_id] add_index :aspect_visibilities, [:post_id] add_foreign_key :aspect_visibilities, :aspects, :dependent => :delete add_foreign_key :aspect_visibilities, :posts, :dependent => :delete delete_disconnected_pvs if pv_count > 0 add_column :post_visibilities, :contact_id, :integer, :null => false move_author_pvs_to_aspect_pvs if pv_count > 0 set_pv_contact_ids if pv_count > 0 delete_duplicate_pvs if pv_count > 0 remove_index :post_visibilities, [:aspect_id, :post_id] remove_column :post_visibilities, :aspect_id add_index :post_visibilities, [:contact_id, :post_id], :unique => true add_index :post_visibilities, [:contact_id] add_foreign_key :post_visibilities, :contacts, :dependent => :delete add_foreign_key :post_visibilities, :posts, :dependent => :delete end def self.down raise ActiveRecord::IrreversibleMigration end end