web-dev-qa-db-fra.com

Comment puis-je supprimer une contrainte unique d'une colonne de base de données dans Rails?

J'ai créé une table en utilisant la migration suivante:

class CreateProfilePictures < ActiveRecord::Migration
  def change
    create_table :profile_pictures do |t|
      t.integer :user_id, null: false
      t.integer :picture_id, null: false
      t.timestamps null: false
    end

    add_index :profile_pictures, :user_id, unique: true
    add_index :profile_pictures, :picture_id, unique: true
  end
end

J'ai essayé de supprimer la contrainte avec les éléments suivants:

class FixProfilePic < ActiveRecord::Migration
  def change
    change_column :profile_pictures, :picture_id, :integer, unique: false
  end
end

J'obtiens toujours une erreur de violation de contrainte unique si j'essaie d'utiliser le même image_id à plusieurs endroits. Quelle est la bonne façon de supprimer la contrainte d'unicité de picture_id?

23
Daniel

Vous devez supprimer votre index avec:

remove_index :profile_pictures, :picture_id

et ajoutez-le à nouveau avec:

add_index :profile_pictures, :picture_id

ActiveRecord :: Migration

42
dthal

add_index: profile_pictures,: picture_id, unique: true

Mettez donc à jour votre index pour:

  remove_index :profile_pictures, :picture_id
  add_index :profile_pictures, :picture_id

Je suppose que c'est ça.

8
Bryan Oemar