Dan*_*iel 24 sql ruby-on-rails rails-migrations
我使用以下迁移创建了一个表:
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
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下内容删除约束:
class FixProfilePic < ActiveRecord::Migration
def change
change_column :profile_pictures, :picture_id, :integer, unique: false
end
end
Run Code Online (Sandbox Code Playgroud)
如果我尝试在多个地方使用相同的picture_id,我仍然会遇到唯一的约束违规错误.从picture_id中删除唯一性约束的正确方法是什么?
小智 43
您必须删除索引:
remove_index :profile_pictures, :picture_id
Run Code Online (Sandbox Code Playgroud)
并再次添加:
add_index :profile_pictures, :picture_id
Run Code Online (Sandbox Code Playgroud)
add_index:profile_pictures,:picture_id,unique:true
所以将索引更新为:
remove_index :profile_pictures, :picture_id
add_index :profile_pictures, :picture_id
Run Code Online (Sandbox Code Playgroud)
我猜这就是它.
接受的答案存在问题:回滚无法正常工作,因为未恢复唯一索引。
你可以试试这个:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13772 次 |
| 最近记录: |