web-dev-qa-db-ja.com

Railsのデータベース列から一意の制約を削除するにはどうすればよいですか?

次の移行を使用してテーブルを作成しました。

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

次の方法で制約を削除しようとしました。

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

同じpicture_idを複数の場所で使用しようとすると、一意の制約違反エラーが引き続き発生します。 picture_idから一意性制約を削除する適切な方法は何ですか?

23
Daniel

次を使用してインデックスを削除する必要があります。

remove_index :profile_pictures, :picture_id

そしてそれを再び追加します:

add_index :profile_pictures, :picture_id

ActiveRecord :: Migration

42
dthal

add_index:profile_pictures、:picture_id、一意:true

インデックスを次のように更新します。

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

これだと思います。

8
Bryan Oemar