You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

20130207181455_add_unique_index_on_custom_fields_projects.rb 1.2KB

123456789101112131415161718192021222324
  1. class AddUniqueIndexOnCustomFieldsProjects < ActiveRecord::Migration[4.2]
  2. def up
  3. table_name = "#{CustomField.table_name_prefix}custom_fields_projects#{CustomField.table_name_suffix}"
  4. duplicates = CustomField.connection.select_rows("SELECT custom_field_id, project_id FROM #{table_name} GROUP BY custom_field_id, project_id HAVING COUNT(*) > 1")
  5. duplicates.each do |custom_field_id, project_id|
  6. # Removes duplicate rows
  7. CustomField.connection.execute("DELETE FROM #{table_name} WHERE custom_field_id=#{custom_field_id} AND project_id=#{project_id}")
  8. # And insert one
  9. CustomField.connection.execute("INSERT INTO #{table_name} (custom_field_id, project_id) VALUES (#{custom_field_id}, #{project_id})")
  10. end
  11. if index_exists? :custom_fields_projects, [:custom_field_id, :project_id]
  12. remove_index :custom_fields_projects, [:custom_field_id, :project_id]
  13. end
  14. add_index :custom_fields_projects, [:custom_field_id, :project_id], :unique => true
  15. end
  16. def down
  17. if index_exists? :custom_fields_projects, [:custom_field_id, :project_id]
  18. remove_index :custom_fields_projects, [:custom_field_id, :project_id]
  19. end
  20. add_index :custom_fields_projects, [:custom_field_id, :project_id]
  21. end
  22. end