我使用以下迁移创建了一个表:
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中删除唯一性约束的正确方法是什么?
答案 0 :(得分:40)
您必须使用以下内容删除索引:
remove_index :profile_pictures, :picture_id
并再次添加:
add_index :profile_pictures, :picture_id
答案 1 :(得分:8)
add_index:profile_pictures,:picture_id,unique:true
因此请将索引更新为:
remove_index :profile_pictures, :picture_id
add_index :profile_pictures, :picture_id
我猜这就是它。
答案 2 :(得分:4)
接受的答案存在问题:由于无法还原唯一索引,因此回滚无法正常进行。
您可以尝试以下方法:
reversible do |dir|
dir.up do
remove_index :profile_pictures, :picture_id
add_index :profile_pictures, :picture_id
end
dir.down do
remove_index :profile_pictures, :picture_id
add_index :profile_pictures, :picture_id, unique: true
end
end