概要
Railsのmigration時に加えた一意制約を解除する方法です。解除するためには、remove_indexを使えばOKです。
説明
例えば、テーブル名xxxs、カラム名yyy_idに対して下記のようなmigrationで一意制約がつけられているとします。
2018zzzzzzzzzz_create_xxx.rb
class CreateXxx < ActiveRecord::Migration[5.1]
def change
create_table :xxxs do |t|
t.string :yyy_id
end
add_index :xxxs, :yyy_id, unique: true
end
end
この場合、一意制約を解除するにはremove_indexをするだけです。
手順
まずmigrationファイルを作成します。(__DeleteYYYIdUniqIndexFromXXX__の部分はなんでもいいです。)
> rails g migration DeleteYYYIdUniqIndexFromXXX
すると、2018zzzzzzzzzz_delete_yyy_id_uniq_index_from_xxx.rb
というファイル名のmigrationファイルが作成されています。
この作成されたmigrationファイルを下記の様に編集します。
2018zzzzzzzzzz_delete_yyy_id_uniq_index_from_xxx.rb
class DeleteYYYIdUniqIndexFromXXX < ActiveRecord::Migration[5.1]
def change
remove_index :xxxs, :yyy_id
end
end
そしてmigration実行してください。
> rake db:migrate
これで終わり。
補足
もし、検索のためなどindexだけはつけておきたい場合は、remove_indexの後にadd_indexを追加すればOKです。
2018zzzzzzzzzz_delete_yyy_id_uniq_index_from_xxx.rb
class DeleteYYYIdUniqIndexFromXXX < ActiveRecord::Migration[5.1]
def change
remove_index :xxxs, :yyy_id
add_index :xxxs, :yyy_id
end
end
参考
所感
普通の話です。
ストレートな日本語の手順があれば役立つと思い、書かれていなかったので書きました。